Jquery 如何处理这些嵌套事件?
我对嵌套事件有问题 考虑这是html代码:Jquery 如何处理这些嵌套事件?,jquery,Jquery,我对嵌套事件有问题 考虑这是html代码: <button id="first">first button </button> <button id="second">second button </button> $(document).ready(function() { $('#first').click(function() { $('#second').click(function() { alert('tes
<button id="first">first button </button>
<button id="second">second button </button>
$(document).ready(function() {
$('#first').click(function() {
$('#second').click(function() {
alert('test');
});
});
}))
当第一个按钮被点击n次时。。。然后单击第一个按钮一次。。警报显示n次
我想处理这个问题:
当点击第一个按钮n次时变成。。。然后单击第一个按钮一次。。警报显示一次
但是不使用one()
方法就可以做到这一点-
var isBind = false;
$('#first').click(function() {
if(!isBind){
$('#second').click(function() {
alert('test');
});
isBind = true;
}
});
只需使用off()
解除绑定事件:
$(document).ready(function() {
$('#first').click(function() {
$('#second').off('click').click(function() {
alert('test');
});
});
});
使用标志(在线程概念中称为锁)
例如:
$(document).ready(function() {
var clicked = false;
$('#first').click(function() {
clicked = true;
});
$('#second').click(function() {
if(clicked){
alert('test');
clicked = false;
}
});
});
因为第二个事件仅在窗口时使用。单击的为true
我知道,这很难看,但是…它很有效,而且很容易理解。(而且它支持多个事件侦听器,请记住更改对象属性的名称window
)我可以问一下为什么要嵌套click处理程序吗?请注意,您不必在window上定义它,您也可以只做var clicked=false
,直接在内部使用它,这样就消除了全局冲突的可能性。@KevinB在我的一些测试中出现了与函数上下文和父函数上下文相关的错误。在Python中,我知道这基本上是好的,但在Javascript中,我更喜欢使用一些全局变量来避免识别变量值的问题。@KevinB顺便说一下,我已经根据您的建议修复了代码。