Jquery如何将.off()转换为.on()

时间:2014-12-19 07:58:35

标签: javascript jquery click

我有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?因为它无法正常工作,无法再次点击。

4 个答案:

答案 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(...);
}