[英]Jquery how to turn .off() to .on()
我有Jquery
click事件,我想在執行我的函數UpdateItemStatus(this.id);
之前防止多次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
? 由於它無法正常工作,因此無法再次單擊。
如何擁有一個全局變量來決定按鈕的單擊動作?
像這樣嗎
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的成功內部
您無需為代碼使用off()。 使用return false:
$('#tableItems').on('click', 'tr', function (e) {
if ($(e.target).closest("td").hasClass("cssClick")) {
return false;
} else{
//do stuff here
}
});
我可能會使用這樣的東西:
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函數。 因為如果觸發了此偵聽器(不能同時觸發另一個偵聽器),則布爾值將更改為結束狀態,然后再處理下一次單擊
似乎您的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(...);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.