我可以用setTimeout重置unbinded函数吗?

时间:2012-05-24 04:46:11

标签: javascript jquery binding bind unbind

天哪,我在这里很多......无论如何,这都是问题所在。我有一个解除绑定的功能,我需要它在一段时间后回来(最好是当视频停止播放时,但现在我只需要一段时间)。

我找到了某人问题类似于我的问题here (on the jquery forums),当我尝试应用解决方案(第一个响应)时,它不起作用。

这是我试图做的事情

$('li', '.thumbs').bind('touchend click', playVideo);


$('li', '.thumbs').bind('touchend click', function() {
        //some code
        playVideo( $(this).index() );
        $("li", ".thumbs").unbind('click');
        setTimeout(function(){
            $('li', '.thumbs').bind('touchend click');
            },5000);
        });

那么,为什么?

**编辑好吧,我让绑定回来了超时,但由于某种原因,它没有完成函数playVideo。它会停止正在播放的视频,但不会启动新视频...

3 个答案:

答案 0 :(得分:2)

$('li', '.thumbs').bind('touchend click', onPlayClick);

function onPlayClick(){
    //some code
    playVideo( $(this).index() );
    $("li", ".thumbs").unbind('click', onPlayClick);
    setTimeout(function(){
        $('li', '.thumbs').bind('click', onPlayClick);
    },5000);
}

此外,如果您使用的是jQuery 1.7+,则首选on() / off()。 例如:

$('li', '.thumbs').on('click', onPlayClick);
$('li', '.thumbs').off('click', onPlayClick);

答案 1 :(得分:1)

在setTimeout中,您没有将元素绑定到函数。添加您的回调函数,问题将得到解决。

setTimeout(function(){
    $('li', '.thumbs').bind('touchend click', playVideo);  // added callback
},5000);

请记住,无论何时重新绑定事件,都必须明确地向其传递一个函数,以便在触发事件时调用,即使您之前已经注册过该事件并在该元素的事件上调用unbind。

另外,请记住,setTimeout和setInterval回调函数具有全局范围,这意味着它们在“窗口”级别具有可见性。您需要确保函数playVideo是在全局范围内定义的,它对setTimeout可见。

答案 2 :(得分:1)

这应该有用。

$('li', '.thumbs').bind('touchend click', playVideo);    
$('li', '.thumbs').bind('touchend click', function() {
    //some code
    playVideo( $(this).index() );
    setTimeout(function(){
        $('li', '.thumbs').unbind().bind('touchend click',playVideo);
        },5000);
    });

因为,在这种情况下每次设置超时时你必须解除绑定先前绑定的函数然后绑定。同时绑定时必须有回调函数。

或者,如果您知道在哪里点击,则可以触发Click而不是绑定 对于Eg,如果要点击类拇指。 Theen

  $('.thumbs').trigger('click');