繁体   English   中英

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

[英]can I reset an unbinded function with setTimeout?

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

我在这里找到了一个类似我的问题的人(在jquery论坛上) ,当我尝试应用解决方案(第一个响应)时,它没有用。

这就是我试图做的事情

 $('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 它会停止正在播放的视频,但不会启动新视频...

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

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

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

请记住,每当您重新绑定一个事件时,您必须显式传递一个函数,以便在触发事件时调用,即使您之前已经注册过该事件并在该元素的事件上调用unbind也是如此。

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

这应该工作。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM