繁体   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