Jquery 多次单击可启动多个事件

Jquery 多次单击可启动多个事件,jquery,Jquery,我希望keydown事件在单击完成后触发,但问题是它在多次单击完成后触发。例如,单击5次并按左箭头键一次将发出5次警报,因为不知何故,我不明白,单击会以某种方式堆积在某种队列中 我想要的是每次按键只触发一次警报。所以,无论点击多少次,每次按键我都只会收到一个警报 有人能向我解释一下背后发生了什么,我该如何解决这个问题 JS HTML+CSS <div id="a"> </div> #a { background-color:blue; width:100

我希望keydown事件在单击完成后触发,但问题是它在多次单击完成后触发。例如,单击5次并按左箭头键一次将发出5次警报,因为不知何故,我不明白,单击会以某种方式堆积在某种队列中

我想要的是每次按键只触发一次警报。所以,无论点击多少次,每次按键我都只会收到一个警报

有人能向我解释一下背后发生了什么,我该如何解决这个问题

JS

HTML+CSS

<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。