首页 > 解决方案 > 剑道工具栏按钮启用后不触发点击事件

问题描述

这是我的逻辑,在这里我试图禁用保存更改按钮并在用户输入重复值时阻止点击事件,如果用户更改值则再次启用它但启用它后不会发生更新/保存事件难道我做错了什么?这是我的代码

function OnChange(data) {
    //data.preventDefault();
    $(".k-grid-save-changes")
        .attr("role", "button")
        .removeClass("k-state-disabled")
        //.addClass("k-grid-save-changes")
        .click(function () {
            return true;
        });
    //console.log("data", data.items["0"].ProviderTypeName);

    var name = data.items["0"].ProviderTypeName;
    var Id = data.items["0"].Id;
    var grid = $("#grid").data("kendoGrid");
    //console.log("Grid ", grid);
    grid.tbody.find('>tr').each(
        function () {
            $(this).css('background', 'white');
            var dataItem = grid.dataItem(this);
            //console.log(dataItem.ProviderTypeName)
            if (dataItem.ProviderTypeName == name && dataItem.Id != Id) {
                $(this).css('background', 'red');
                $(".k-grid-save-changes")
                    //.removeClass("k-grid-save-changes")
                    .addClass("k-state-disabled")
                    //.removeAttr("role")
                    .click(function () {
                        return false;
                    });
                    }
                });
}

这是调用 on change 事件的地方

.Events(events => events.RequestStart("OnRequestStart").Change("OnChange").RequestEnd("OnRequestEnd").Error("onError"))

如果我删除“return false;” 它按预期工作,但这允许保存重复的值。所以我用过这个。

标签: javascriptjquerykendo-gridkendo-asp.net-mvc

解决方案


如果我在您的代码中理解正确,那么您将完全按照您提到的问题进行操作。每次更改都禁用保存功能并返回 false。您不会在任何时候再次启用它。

如果您将事件处理程序添加到按钮,那么您必须稍后撤消它。因为虽然我不认为验证应该发生在更改事件但在按钮单击时,我建议使用网格保存事件,您可以在其中迭代网格的 dataSource.data() (更好)进行检查并如果发生任何事情,则返回 false。

由于您可能希望具有背景的 css 效果,另一种方法是保留您的代码并丢弃单击事件。只需设置一个可以在保存事件中使用的标志。像这样的东西:

if(// your control){
   $(this).css('background', 'red');
    duplicatedValue = true;
}else{
   .removeClass("k-grid-save-changes");
   duplicatedValue = false;
}

在保存事件中

function onSave(){
   if(duplicatedValue){
      return false;
   }
}

推荐阅读