Jquery 如何将 .off() 切换到 .on()

Jquery how to turn .off() to .on()

本文关键字:on off Jquery      更新时间:2023-09-26

我有Jquery单击事件,我想在执行我的函数UpdateItemStatus(this.id);之前防止多个click,所以我尝试了以下代码使用开/关事件,

$('#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((。使用返回假:

$('#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");                
        });
    }
});

并在更新项目状态中:

function UpdateItemStatus(id){
    //do stuff
    return $.ajax(...);
}