簡體   English   中英

jQuery如何將.off()轉換為.on()

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM