javascript - 剑道工具栏按钮启用后不触发点击事件
问题描述
这是我的逻辑,在这里我试图禁用保存更改按钮并在用户输入重复值时阻止点击事件,如果用户更改值则再次启用它但启用它后不会发生更新/保存事件难道我做错了什么?这是我的代码
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;” 它按预期工作,但这允许保存重复的值。所以我用过这个。
解决方案
如果我在您的代码中理解正确,那么您将完全按照您提到的问题进行操作。每次更改都禁用保存功能并返回 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;
}
}
推荐阅读
- c++ - #include 之间是否有任何性能差异
和#include“文件名”? - spring-boot - 如何为网关云过滤器编写 junit5 测试以及如何获得此代码的完整代码覆盖率
- spring - 是否可以通过 .sql 脚本禁用嵌入式 H2 jdbc 数据源初始化并使用实体注释对象而不使用初始化数据
- flutter - Flutter Rive、Flare Actor 同步并不完美
- android - 在对 JSON 响应进行一些数学运算后,如何在颤振中创建 PDF 文件?
- go - rpc 错误:代码 = 不可用 desc = Go 代码中的连接已关闭
- c# - 正则表达式 - 删除来自文本字符串
- php - 如何使用 htaccess 隐藏 php 文件扩展名?
- css - 来自redux store的动态样式在react native中
- node.js - pino-debug 和 express-pino-logger 有什么区别