无法绑定从列表框中选择的值

尼可·加慕林

我试图创建一个双列表框,将项目从一个移到另一个,然后最终将列表中的数据传递回控制器。

作为一名JavaScript新手,我正在努力进行数据绑定。要将数据从一个列表框移动到另一个列表框,我创建了以下表单:

 <div class="container">
            <form role="form">
        <div class="container">
            <div class="row">
                <div class="col-md-5">
                    <div class="form-group">
                        <label for="SelectLeft">User Access:</label>
                        <select class="form-control" id="SelectLeft" multiple="multiple" data-bind="options : ownership, optionsText:function(item) { return item.FirstName + ' ' + item.LastName}, value:selectedItem">
                            @*<select class="form-control" id="SelectLeft" multiple="multiple">
                        </select>
                    </div>
                </div>   
                <div class="col-md-2">

                        <div class="btn-group-vertical">
                            <input class="btn btn-primary" id="MoveLeft" type="button" value=" << " data-bind="click: addItem" />
                            <input class="btn btn-primary" id="MoveRight" type="button" value=" >> " data-bind="click: removeSelected" />       
                        </div>

                </div>
                <div class="col-md-5">
                    <div class="form-group">
                        <label for="SelectRight">Owners:</label>
                        <select class="form-control" multiple="multiple" id="SelectRight" data-bind="options : availableOwners, optionsText:function(item) { return item.FirstName + ' ' + item.LastName}, value:selectedItem">
                        </select>
                    </div>
                </div>

            </div>                
        </div>
                <button type="submit" class="btn btn-default" value="Cancel" name="addEditUser" id="btnCancel" data-bind="click: cancel">Cancel</button>
                <button type="submit" class="btn btn-default" value="Submit" name="addEditUser" id="btnSubmit" data-bind="click: submit">Save</button>
    </form>
</div>

<script>
    var data=@(Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model)));
    var owners = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(ViewBag.AccessOwners));
    var availableOwners = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(ViewBag.owners));
    function viewModel() {
        this.username=ko.observable(data.Username);
        this.password=ko.observable(data.Password);
        this.email=ko.observable(data.Email);
        this.isActive=ko.observable(data.IsActive);
        this.userId = ko.observable(data.UserId);
        this.ownership=ko.observable(owners);
        this.availableOwners = ko.observable(availableOwners)
        this.selectedItem = ko.observable();

        this.submit = function()
        {
            $.ajax({
                url: '@Url.Action("UserSave", "Admin")',
                type: 'POST',
                data: ko.toJSON(this),
                contentType: 'application/json',
            });
            window.location.href = url;
            return false;
        }

        this.cancel = function()
        {
            window.location.href = url;
            return false;
        }

        this.addItem = function () {
            if ((this.selectedItem() != "") && (this.ownership.indexOf(this.selectedItem()) < 0))
            {
                // Prevent blanks and duplicates
                this.ownership.push(this.selectedItem());
                this.availableOwners.removeAll(this.selectedItem());
            }
            this.selectedItem(""); // Clear the text box
        };

        this.removeSelected = function () {
            if ((this.selectedItem() != "") && (this.availableOwners.indexOf(this.selectedItem()) < 0))
            {
                this.ownership.removeAll(this.selectedItems());
                this.availableOwners.push(this.selectedItem());
            }
            this.selectedItem("");
        };

        this.sortItems = function() {
            this.ownership.sort();
            this.availableOwners.sort();
        };
    };
ko.applyBindings(new viewModel());
var url = $("#RedirectTo").val();

当我按下按钮MoveLeft或MoveRight时,出现以下错误:

Uncaught TypeError: undefined is not a function 
    (anonymous function) 
    jQuery.event.dispatch 
    elemData.handle

有谁知道如何将选定的值从列表框中传递给addItem或removeItem函数,以便从列表所有权中添加或删除对象?

谢谢!

超酷

好吧,niko继续使用Javascript会特别有趣,尤其是使用ko

我分叉了一些代码,使您可以更好地理解它们。

除了亲爱的原因Wayne Ellery外,您还缺少一些其他东西,例如selectedOptions您有机会选择多个列表项时必须使用的东西

您给我们的错误undefined is not a function是因为您正在选择多个列表项并尝试推送它,这与ko推送的工作方式并不完全相同,而是您必须循环遍历并执行此操作。

在这里查看selectedOptions文档

拥有小提琴权总是一件好事。在这里,我们去检查工作小提琴这里

无需像您给出的那样做其他逻辑,因为click它可以用简单易读的方式完成

查看模型:

    var vm=function() {
    var self=this;
    //observable's declaration    

    self.addItem = function () {
    ko.utils.arrayForEach(self.selectedItem1(),function(item){
    self.availableOwners.push(item);
        self.ownership.remove(item);
    });
    }

    self.removeSelected = function () {
    ko.utils.arrayForEach(self.selectedItem2(),function(item){
    self.ownership.push(item);
    self.availableOwners.remove(item)
    });
    };

};
ko.applyBindings(new vm());

看法:

<select  multiple="multiple" data-bind="options : ownership, optionsText:function(item) { return item.FirstName() + ' ' + item.LastName()}, selectedOptions:selectedItem1"></select>

 <input class="btn btn-primary" id="MoveLeft" type="button" value=" << " data-bind="click:removeSelected,enable:selectedItem2"  />

关于此的任何问题都归给我们。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Selenium Webdriver从列表框中选择值

来自分类Dev

使用Selenium WebDriver从列表框中选择值

来自分类Dev

添加从列表框中选择的所有值

来自分类Dev

从sqlite数据库中选择数据并将值绑定到Windows Phone 8应用中的列表框项

来自分类Dev

从sqlite数据库中选择数据并将值绑定到Windows Phone 8应用中的列表框项

来自分类Dev

从列表框中选择的项目

来自分类Dev

如何从列表框中选择内容

来自分类Dev

c#WPF从列表框中选择的项目绑定到数据表

来自分类Dev

使用组合框中的值编辑从列表框中选择的记录中的字段

来自分类Dev

以编程方式从值列表中选择列表框中的项目

来自分类Dev

在列表框中选择一个值并将焦点设置在该值上 - VBA

来自分类Dev

如何在工作表中搜索从useform多选列表框中选择的匹配值或项目?

来自分类Dev

如何使用Shift键单击来在列表框中选择多个文本值?

来自分类Dev

在列表框中选择一个值时,面板是否可见

来自分类Dev

如何使用Shift键单击来在列表框中选择多个文本值?

来自分类Dev

如何在vb.net的列表框中选择项目的值和名称

来自分类Dev

ACCESS VBA从列表框中选择多个值并执行查询名称

来自分类Dev

基于ASP.Net中列表框中选择的值动态创建选项卡

来自分类Dev

在jQuery的所有列表框中选择一个值

来自分类Dev

如何使用VBA代码从Multiselect列表框中选择输入的值

来自分类Dev

通过VBA在html的下拉列表框中选择多个值

来自分类Dev

无法选择 wpf 列表框项目

来自分类Dev

用户从下拉列表框中选择选项后,如何获取新选择的值和旧的值?

来自分类Dev

从多个列表框中选择一个列表框

来自分类Dev

Linq从列表框中选择所有项目

来自分类Dev

单击其中的按钮时,在列表框中选择行

来自分类Dev

如何找到在列表框中选择的项目数量?

来自分类Dev

使用MVVM在WPF中选择列表框的项目

来自分类Dev

离子/如何在列表框中选择多个项目?

Related 相关文章

  1. 1

    使用Selenium Webdriver从列表框中选择值

  2. 2

    使用Selenium WebDriver从列表框中选择值

  3. 3

    添加从列表框中选择的所有值

  4. 4

    从sqlite数据库中选择数据并将值绑定到Windows Phone 8应用中的列表框项

  5. 5

    从sqlite数据库中选择数据并将值绑定到Windows Phone 8应用中的列表框项

  6. 6

    从列表框中选择的项目

  7. 7

    如何从列表框中选择内容

  8. 8

    c#WPF从列表框中选择的项目绑定到数据表

  9. 9

    使用组合框中的值编辑从列表框中选择的记录中的字段

  10. 10

    以编程方式从值列表中选择列表框中的项目

  11. 11

    在列表框中选择一个值并将焦点设置在该值上 - VBA

  12. 12

    如何在工作表中搜索从useform多选列表框中选择的匹配值或项目?

  13. 13

    如何使用Shift键单击来在列表框中选择多个文本值?

  14. 14

    在列表框中选择一个值时,面板是否可见

  15. 15

    如何使用Shift键单击来在列表框中选择多个文本值?

  16. 16

    如何在vb.net的列表框中选择项目的值和名称

  17. 17

    ACCESS VBA从列表框中选择多个值并执行查询名称

  18. 18

    基于ASP.Net中列表框中选择的值动态创建选项卡

  19. 19

    在jQuery的所有列表框中选择一个值

  20. 20

    如何使用VBA代码从Multiselect列表框中选择输入的值

  21. 21

    通过VBA在html的下拉列表框中选择多个值

  22. 22

    无法选择 wpf 列表框项目

  23. 23

    用户从下拉列表框中选择选项后,如何获取新选择的值和旧的值?

  24. 24

    从多个列表框中选择一个列表框

  25. 25

    Linq从列表框中选择所有项目

  26. 26

    单击其中的按钮时,在列表框中选择行

  27. 27

    如何找到在列表框中选择的项目数量?

  28. 28

    使用MVVM在WPF中选择列表框的项目

  29. 29

    离子/如何在列表框中选择多个项目?

热门标签

归档