在做某事后重置.one('click')?

时间:2014-02-04 17:14:20

标签: javascript jquery click timeout reset

为防止连续两次触发事件,是否可以执行此类操作?

$('.examplediv').one('click', function() {
    //doing a bunch of stuff
    //somehow rebind the .one('click') <------
});

我想在//做一些事情之后重置.one('click'),以便可以再次触发整个事件。

-edit -

我尝试过RocketHazmats解决方案,

$('.examplediv').on('click', function() {
    if(!$(this).data('click_running')){
        $(this).data('click_running', true);
        //doing a bunch of stuff
        $(this).data('click_running', false);
    }
});

但是,如果我快速双击它,那么//做一堆东西仍然不止一次。

如果我在超时时这样做,那么它应该是这样吗?

$('.examplediv').on('click', function() {
    if(!$(this).data('click_running')){
        $(this).data('click_running', true);
        //doing a bunch of stuff
        setTimeout(function() {
            $(this).data('click_running', false);
        }, 2500);
    }
});

虽然如果我双击它至少连续两次没有它,但是上面的代码我不能再次按下它,尽管超时?显然我做错了。

2 个答案:

答案 0 :(得分:0)

只需使用off()

即可
$('.examplediv').off('click');

答案 1 :(得分:0)

您可以尝试向元素添加“running”标志,以阻止该事件已经运行。

$('.examplediv').on('click', function() {
    if(!$(this).data('click_running')){
        $(this).data('click_running', true);
        //do some stuff

        //make the .examplediv accept another click event?
        $(this).data('click_running', false);
    }
});