我有Jquery
点击事件,我想在执行我的函数click
之前阻止多个UpdateItemStatus(this.id);
,所以我尝试使用开/关事件进行下面的代码,
$('#tableItems').on('click', 'tr', function (e) {
if ($(e.target).closest("td").hasClass("cssClick")) {
$(this).off(e);
UpdateItemStatus(this.id);
$(this).on(e);
}
});
但我该怎么转。on
?因为它无法正常工作,无法再次点击。
答案 0 :(得分:3)
如何使用一个全局变量来决定按钮点击操作?
这样的东西?
var clickevent = true;
$('#tableItems').on('click', 'tr', function (e) {
if(clickevent){
if ($(e.target).closest("td").hasClass("cssClick")) {
clickevent = false;
UpdateItemStatus(this.id);
clickevent = true;
}
}
});
如果UpdateItemStatus
函数有ajax,那么我建议你将clickevent = true
置于该ajax的成功之中
答案 1 :(得分:0)
您不需要为代码使用off()。使用return false:
$('#tableItems').on('click', 'tr', function (e) {
if ($(e.target).closest("td").hasClass("cssClick")) {
return false;
} else{
//do stuff here
}
});
答案 2 :(得分:0)
我可能会使用这样的东西:
var inputstate = false;
$('#tableItems').on('click', 'tr', function (e) {
if ($(e.target).closest("td").hasClass("cssClick")) {
if(!inputstate){
inputstate = true;
setTimeout((function(element){
return function(){
UpdateItemStatus(element);
inputstate = false;
};
})(this),50);
}
}
});
setTimeout用于“延迟调用”UpdateItemStatus函数。 因为如果触发了这个监听器,(同时不能触发另一个监听器),布尔值将在处理下一次单击之前更改为结束状态
答案 3 :(得分:0)
好像你的UpdateItemStatus()
使用了一些异步调用(ajax?),所以这就是我如何做到的:
$('#tableItems').on('click', 'tr', function (e) {
var $td = $(e.target).closest("td");
if ($td.hasClass("cssClick")) {
$td.toggleClass("cssClick");
UpdateItemStatus(this.id).done(function(){
$td.toggleClass("cssClick");
});
}
});
并在UpdateItemStatus中:
function UpdateItemStatus(id){
//do stuff
return $.ajax(...);
}