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;。如果警报没有触发,那么是范围问题;如果警报确实触发,那么可能是玩家出了问题。这可以为您的故障排除提供一个起点,并帮助您缩小问题范围。