Jquery 多次单击可启动多个事件
我希望keydown事件在单击完成后触发,但问题是它在多次单击完成后触发。例如,单击5次并按左箭头键一次将发出5次警报,因为不知何故,我不明白,单击会以某种方式堆积在某种队列中 我想要的是每次按键只触发一次警报。所以,无论点击多少次,每次按键我都只会收到一个警报 有人能向我解释一下背后发生了什么,我该如何解决这个问题 JS HTML+CSSJquery 多次单击可启动多个事件,jquery,Jquery,我希望keydown事件在单击完成后触发,但问题是它在多次单击完成后触发。例如,单击5次并按左箭头键一次将发出5次警报,因为不知何故,我不明白,单击会以某种方式堆积在某种队列中 我想要的是每次按键只触发一次警报。所以,无论点击多少次,每次按键我都只会收到一个警报 有人能向我解释一下背后发生了什么,我该如何解决这个问题 JS HTML+CSS <div id="a"> </div> #a { background-color:blue; width:100
<div id="a"> </div>
#a {
background-color:blue;
width:100px;
height:100px;
}
#a{
背景颜色:蓝色;
宽度:100px;
高度:100px;
}
每次单击事件发生时,您都在运行绑定keydown函数的代码。单击5次将绑定5次
为了避免这种情况,您可以使用某种第一次设置的标志,然后在设置标志时忽略它
$(document).ready(function () {
var flag = false;
$('#a').click(function () {
if (flag) {
return false;
}
flag = true;
$(document).keydown(function (key) {
switch (parseInt(key.which, 10)) {
// Left arrow key pressed
case 37:
alert('test');
break;
}
});
});
});
每次单击事件发生时,您都在运行绑定keydown函数的代码。单击5次将绑定5次 为了避免这种情况,您可以使用某种第一次设置的标志,然后在设置标志时忽略它
$(document).ready(function () {
var flag = false;
$('#a').click(function () {
if (flag) {
return false;
}
flag = true;
$(document).keydown(function (key) {
switch (parseInt(key.which, 10)) {
// Left arrow key pressed
case 37:
alert('test');
break;
}
});
});
});
每次单击标记时,它都会绑定keydown事件,因此必须解除绑定keydown事件
$(document).ready(function () {
$('#a').click(function () {
$(document).off("keydown");
$(document).on("keydown", function (key) {
switch (parseInt(key.which, 10)) {
// Left arrow key pressed
case 37:
alert('test');
break;
}
});
});
});
或使用
var isclickA = false;
$('#a').click(function () {
isclickA = true;
});
$(document).on("keydown", function (key) {
if (isclickA) {
switch (parseInt(key.which, 10)) {
// Left arrow key pressed
case 37:
alert('test');
break;
}
}
});
每次单击标记时,它都会绑定keydown事件,因此必须解除绑定keydown事件
$(document).ready(function () {
$('#a').click(function () {
$(document).off("keydown");
$(document).on("keydown", function (key) {
switch (parseInt(key.which, 10)) {
// Left arrow key pressed
case 37:
alert('test');
break;
}
});
});
});
或使用
var isclickA = false;
$('#a').click(function () {
isclickA = true;
});
$(document).on("keydown", function (key) {
if (isclickA) {
switch (parseInt(key.which, 10)) {
// Left arrow key pressed
case 37:
alert('test');
break;
}
}
});
每次单击都会绑定事件。因此,当您单击多次时,事件会绑定多次@Satpal,而不是你可以建议
.one()
每次单击时为keydown事件添加一个新的事件处理程序,因此keydown事件的函数激发的次数与你绑定事件处理程序的次数相同,每次单击都会绑定,明白吗!处理程序…放在哪里?排队?我花了很长时间才发现这就是问题所在,也许我缺少一个基本的理解。如果这对你有帮助的话,你可以把它想象成一个队列,但它们实际上只是“添加”,每一个,每一个触发等等。这不像你添加同一个事件处理程序两次,最后一个会覆盖第一个,等等。它们都会粘住。每次单击都会绑定事件。因此,当您单击多次时,事件会绑定多次@Satpal,而不是你可以建议.one()
每次单击时为keydown事件添加一个新的事件处理程序,因此keydown事件的函数激发的次数与你绑定事件处理程序的次数相同,每次单击都会绑定,明白吗!处理程序…放在哪里?排队?我花了很长时间才发现这就是问题所在,也许我缺少一个基本的理解。如果这对你有帮助的话,你可以把它想象成一个队列,但它们实际上只是“添加”,每一个,每一个触发等等。这不像你添加同一个事件处理程序两次,最后一个会覆盖第一个,等等。它们都会粘住。-1:这可能会回答这个问题,但不解释你改变了什么(以及为什么)意味着答案对OP和所有人都几乎没有用处else@Satpal-打字需要一点时间;)没有那么多代码可以让你的眼睛进行快速比较@Peeps先生,还有一点解释会让你更容易阅读。杰米克只是想给你一个更好的答案。对China的批评这里的问题是,它只接受一次点击。例如,我希望能够在div上点击多次。-1:这可能会回答这个问题,但不解释你改变了什么(以及为什么),意味着答案对OP和所有人都几乎没有用处else@Satpal-打字需要一点时间;)没有那么多代码可以让你的眼睛进行快速比较@Peeps先生,还有一点解释会让你更容易阅读。杰米克只是想给你一个更好的答案。对China的批评这里的问题是,它只接受一次点击。例如,我希望能够多次单击div。