1

天哪,我经常在这里...无论如何,这是问题所在。我有一个未绑定的功能,我需要它在一定时间后返回(最好是在视频停止播放时,但现在我只播放一定的秒数)。

我在这里(在 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。它会停止正在播放的视频,但不会开始新的视频...

4

3 回答 3

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);
于 2012-05-24T04:49:22.017 回答
1

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

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

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

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

于 2012-05-24T04:50:32.097 回答
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 而不是绑定。
例如,如果要单击类拇指。那么

  $('.thumbs').trigger('click');   
于 2012-05-24T04:59:37.190 回答