【问题标题】:kendo ui multiselect get the names of the values already selectedkendo ui multiselect 获取已选择的值的名称
【发布时间】:2014-03-21 19:40:36
【问题描述】:

我有一个多选剑道,由 mvc 中的控制器填充。

我在下拉列表中有一个选项,即 selectAll,当我选择该选项时,我会清除所有其他选项,现在我想禁用下拉列表(但不是删除“全选”选项的选项。

如果我愿意

multiselect.enable(false) //i lose the option to delete the selected "Select All"

使用下面的代码:当我选择“全选”选项时,我会清除所有其他选择的选项,而剑道只是让选中的所有选项被选中。

 if (sel == 'Select All') {

        var name_Controller = $(e.item).parent().attr('id');

        var name_Controller = name_Controller.substr(0, name_Controller.indexOf('_'));

        var t = "#" + name_Controller;

        var required = $(t).data("kendoMultiSelect");

        required.value(""); // to clean 

现在.. 我怎样才能禁用另一个选项,或者知道已经选择的选项的名称以便执行以下操作:

       if(required.contains("Select All")) //dont do nothing

required.val() 确实有效,因为它在多个下拉列表中使用,所有自动使用不同的 id

【问题讨论】:

    标签: jquery kendo-ui telerik


    【解决方案1】:

    可能是它的旧帖子,但是当我遇到类似情况时,我找到了直接解决方案。

    $("#kendo-dropdown-id").data("kendoMultiSelect").dataItems() 将为您提供从 Kendo 多选中选择的所有项目控制。

    如果您有任何疑问,请告诉我..

    【讨论】:

    • 你的代码引用了kendoDropDownList:你应该把它改成$("#kendo-dropdown-id").data("kendoMultiSelect").dataItems();
    • 对不起...chiapa..我的错..我是认真的..谢谢你帮助我.. :)
    【解决方案2】:

    一种不同的方法,而不是试图将文本值强制退出多选。捕获数据绑定事件并获取整个数据源并将该完整数组存储在您的模型中。

    然后,您可以使用选定的值来查找您现在拥有的原始数据源的数据。这将允许您在 viewModel 和页面之间保持松散的依赖关系。

    【讨论】:

      【解决方案3】:

      有两个问题要记住:

      1. 如何从列表中过滤选项:您应该使用filter
      2. 拦截change 事件,以便分析选择了哪些选项,如果选择了“全选”,则过滤列表中的每个选项。

      你应该做的是:

      var multi = $("#colors").kendoMultiSelect({
          dataSource: [
              { name: "Select All" },
              { name: "Red" },
              { name: "Green" },
              { name: "Blue" }
          ],
          dataTextField: "name",
          dataValueField: "name",
          change: function(e) {
              // Get selected options
              var values = this.value();
              if ($.inArray("Select All", values) != -1) {
                  // If "Select All" is in the list
                  // Remove other possibly selected options
                  multi.value("Select All");
                  // Remove any option from the datasource
                  multi.dataSource.filter({ field : "name", operator : "eq", value : "Select All"});
              } else {
                  // Clean filter
                  multi.dataSource.filter({ });
              }
          }
      }).data("kendoMultiSelect");
      

      在这里查看:http://jsfiddle.net/OnaBai/9nVdq/6/

      编辑:如果你想做一个通用函数来处理这个“全选”,你应该将 MultiSelects 定义为:

      var multi = $("#colors").kendoMultiSelect({
          dataSource: colors,
          dataTextField: "name",
          dataValueField: "name",
          change: selectAll
      }).data("kendoMultiSelect");
      
      $("#cities").kendoMultiSelect({
          dataSource: cities,
          dataTextField: "name",
          dataValueField: "name",
          change: selectAll
      });
      

      函数selectAll为:

      function selectAll(e) {
          // Get selected options
          var values = this.value();
          if ($.inArray("Select All", values) != -1) {
              // If "Select All" is in the list
              // Remove other possibly selected options
              this.value("Select All");
              // Remove any option from the datasource
              this.dataSource.filter({ field : "name", operator : "eq", value : "Select All"});
          } else {
              // Clean filter
              this.dataSource.filter({ });
          }
      }
      

      “诀窍”是this 引用当前的multiselect

      在此处查看实际操作:http://jsfiddle.net/OnaBai/9nVdq/8/

      【讨论】:

      • 感谢答案!但是,我有另一个问题,就像我在下面描述的那样。你知道怎么解决吗?!为了实施您提供的这个解决方案?
      • 顺便说一句:您不应该使用答案空间来提供更多详细信息,您应该尽可能编辑原始问题。
      猜你喜欢
      • 1970-01-01
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      相关资源
      最近更新 更多