Javascript 我可以用setTimeout重置未绑定的函数吗?

Javascript 我可以用setTimeout重置未绑定的函数吗?,javascript,jquery,binding,bind,unbind,Javascript,Jquery,Binding,Bind,Unbind,天哪,我经常在这里。。。无论如何,这是个问题。我有一个未绑定的函数,我需要它在一定时间后(最好是在视频停止播放时)返回,但现在我只需要几秒钟。我发现有人有类似的问题,当我尝试在第一个响应中应用解决方案时,它不起作用 这就是我想做的 $('li', '.thumbs').bind('touchend click', playVideo); $('li', '.thumbs').bind('touchend click', function() { //some code

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

我发现有人有类似的问题,当我尝试在第一个响应中应用解决方案时,它不起作用

这就是我想做的

$('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);
        });
那么,为什么呢?

**编辑好的,我得到了绑定以返回超时,但由于某些原因,它没有完成播放视频的功能。它会停止正在播放的视频,但不会启动新视频

$('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。 例如:

此外,如果您使用的是jQuery 1.7+,则最好使用on/off。 例如:


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

setTimeout(function(){
    $('li', '.thumbs').bind('touchend click', playVideo);  // added callback
},5000);
请记住,无论何时重新绑定事件,都必须显式地向其传递一个在触发事件时调用的函数,即使之前已注册该事件并在该元素的事件上调用了unbind


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

在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);
    });
因为,在这种情况下,每次设置超时时,都必须先解除先前绑定函数的绑定,然后再绑定。绑定时还必须有回调函数

或者,如果知道单击的位置,可以触发单击而不是绑定。 例如,如果要单击类拇指,请单击。西恩

  $('.thumbs').trigger('click');   
这应该行得通

$('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);
    });
因为,在这种情况下,每次设置超时时,都必须先解除先前绑定函数的绑定,然后再绑定。绑定时还必须有回调函数

或者,如果知道单击的位置,可以触发单击而不是绑定。 例如,如果要单击类拇指,请单击。西恩

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


你是说settimeout中onclick的绑定不起作用吗?@jmort253是的,那和绑定都没有回来你是说settimeout中onclick的绑定不起作用吗?@jmort253是的,那和绑定都没有回来嗨,阿伦,你能举个开/关的例子吗?好建议+1在这种情况下,开/关在语法上几乎是一样的。我确实按照你的建议应用了开/关,而且它很有效,所以有一个问题,值得一提的是,“开”是授权,这意味着如果娜塔莎添加更多与li和.thumbs匹配的元素,他们会自动应用click事件吗?这可能是她想要的,也可能不是,也可能是值得澄清的,以防其他人对差异有疑问。祝你好运@Nata2haMayan2-我更新了上面的内容,因为之前函数名可能会发生冲突。嗨,ahren,你能举个开/关的例子吗?好建议+1在这种情况下,开/关在语法上几乎是一样的。我确实按照你的建议应用了开/关,而且它很有效,所以有一个问题,值得一提的是,“开”是授权,这意味着如果娜塔莎添加更多与li和.thumbs匹配的元素,他们会自动应用click事件吗?这可能是她想要的,也可能不是,也可能是值得澄清的,以防其他人对差异有疑问。祝你好运@Nata2haMayan2-我更新了上面的内容,因为之前函数名可能会发生冲突。这是可行的,但由于某种原因,函数一旦重新启动就无法工作-binded@Nata2haMayan2-请参阅最后一段。playVideo是否在全局范围内定义?ahren还指出,您可能与函数名冲突或使用了错误的名称。我看不到足够多的代码来确定,但您肯定应该检查一下。故障排除步骤可能是在setTimeout绑定事件中绑定一些您知道有效的东西,如函数natashaWasHere{alertyo!;},然后传递.bindclick,natashaWasHere;。如果警报没有触发,那么这是范围问题,如果警报确实触发,那么可能是t出了问题
他是一名运动员。这可以为您的故障排除提供一个起点,并帮助您缩小问题的范围。这是可行的,但由于某些原因,该功能在重新启动后无法工作-binded@Nata2haMayan2-请参阅最后一段。playVideo是否在全局范围内定义?ahren还指出,您可能与函数名冲突或使用了错误的名称。我看不到足够多的代码来确定,但您肯定应该检查一下。故障排除步骤可能是在setTimeout绑定事件中绑定一些您知道有效的东西,如函数natashaWasHere{alertyo!;},然后传递.bindclick,natashaWasHere;。如果警报没有触发,那么是范围问题;如果警报确实触发,那么可能是玩家出了问题。这可以为您的故障排除提供一个起点,并帮助您缩小问题范围。