【问题标题】:Kendo UI - custom grid filter: checkbox doesn't work on each clickKendo UI - 自定义网格过滤器:复选框在每次点击时都不起作用
【发布时间】:2016-09-15 11:57:49
【问题描述】:

[更新]

在我这样做之后: http://dojo.telerik.com/aqIXa 当我单击例如 ProductName 过滤器,然后选择并取消选择所有项目时,转到其他字段例如 Unit Price,单击选择并取消选择所有我返回到 Product Name 字段,并且现在在过滤器中:

您可以看到 Select All 组合框再次创建,并且在我重复这些步骤后它将继续创建。有谁知道为什么会发生这种情况?

我目前在剑道工作,并尝试为每一列制作自定义网格过滤器。 我用了这个例子:

http://dojo.telerik.com/iwAWU

在我添加的 initCheckboxFilter 函数中,它为全选创建了复选框。

var selectAllCheckbox= $("<div><input type='checkbox' id='checkAll' checked/> Select All</div>").insertBefore(".k-filter-help-text");

在我实现的功能之外:

function clickMe(){
   $("#checkAll").click(function () {
    if ($("#checkAll").is(':checked')) {
        $(".book").prop("checked", true);
    } else {
        $(".book").prop("checked", false);
    }
});
} 

(.book 是里面的模板类:

 var element = $("<div class='checkbox-container'></div>").insertAfter(helpTextElement).kendoListView({
          dataSource: checkboxesDataSource,
          template: "<div><input type='checkbox' class='colDefFilter'  value='#:" + field + "#' checked />#:" + field + "#</div>",
        });

)

我还添加了 UnitPrice 和 UnitInStock 字段:

function onFilterMenuInit(e) {
        debugger;
        if (e.field == "ProductName" || "UnitPrice" || "UnitInStock") {
          initCheckboxFilter.call(this, e);

        }
      } 

这看起来像:

我第一次单击某个列过滤器上的全选复选框时,它会选中和取消选中所有项目,它工作正常。当我尝试在其他列上执行此操作时,该事件不会触发。有谁知道出了什么问题? 谢谢!

【问题讨论】:

    标签: javascript jquery kendo-ui telerik kendo-grid


    【解决方案1】:

    您的问题是您使用 id 来检查所有复选框,这就是 jquery 总是从第一个下拉列表(产品)中选择复选框的原因

    您需要将 checkAll 用作类而不是 id,然后像这样更改您的 clickMe() 函数,它将起作用:

    function clickMe(){
           $(".checkAll").click(function () {
            if ($(this).is(':checked')) {
               $(this).closest('.k-filter-menu').find(".book").prop("checked", true);
            } else {
                $(this).closest('.k-filter-menu').find(".book").prop("checked", false);
            }
        });
        }
    

    这是工作示例http://dojo.telerik.com/aqIXa

    编辑:

    你用来添加全选复选框的方式应该是这样的

    var selectAllCheckbox= $("<div><input type='checkbox' class='checkAll' checked/> Select All</div>").insertBefore(e.container.find(".k-filter-help-text"));
    

    这个

    var selectAllCheckbox= $("<div><input type='checkbox' id='checkAll' checked/> Select All</div>").insertBefore(".k-filter-help-text");
    

    否则它将为先前初始化的过滤器下拉列表添加多个全选复选框。

    这里是更新的演示:http://dojo.telerik.com/aqIXa/4

    【讨论】:

    • 酷,如果它对你有用,请你接受我的回答:)
    • 我只有一个问题:在产品名称字段上单击选择/取消选择全部后,关闭过滤器,在其他字段(例如库存单位)上重复相同的操作,然后再次单击产品名称过滤器,我有 2 选择所有组合框! (现在在项目列表下方和“等于过滤器”上方创建了另一个全选组合框),您知道为什么会发生这种情况吗?谢谢!
    • 发生这种情况是因为每次新过滤器初始化时都会调用函数 initCheckboxFilter() 并且您使用 k-filter-help-text 类来附加您的检查所有复选框。现在这里发生的是 jquery 搜索 k-filter-help-text 类并为所有匹配元素添加复选框。因此,您需要像这样更改选择器 selectAllCheckbox= $("
      Select All
      ").insertBefore(e.container.find(" .k-filter-help-text"));
    • 你是天才! :D 我是新手,你的解释很棒。再次感谢! :)
    • 很高兴为您提供帮助:)
    猜你喜欢
    • 2014-12-23
    • 2014-04-18
    • 1970-01-01
    • 2014-02-18
    • 2023-03-23
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    相关资源
    最近更新 更多