【问题标题】:How to fire only one of the event if both of them occur?如果两者都发生,如何只触发其中一个事件?
【发布时间】:2016-08-18 08:42:43
【问题描述】:

我使用这段代码来处理事件,但如果它们都发生或其中之一发生,我想触发一次。

$(document).on("keypress blur", ".pollOptionInput", function(e) {
  if (e.type == 'focusout' || e.keyCode == 13) {
    e.preventDefault();
    addPollOption();
    $('.btnAdd').focus();
  }
});

如果我按下回车键,我的代码会触发两次。 我该如何解决我的问题?

【问题讨论】:

  • e.type 永远不会是focusout..试试keypress
  • @Rayon 但 e.type 在控制台中是 focusout
  • 试试$(document).on("keypress blur", ".pollOptionInput", function(e) { if (e.keyCode || e.which === 13) { e.preventDefault(); } else { addPollOption(); $('.btnAdd').focus(); } });

标签: javascript jquery events


【解决方案1】:

它没有任何问题。也许您两次附加事件,这就是问题所在。 请注意,我更改了事件附加方式 - read more

$(document).ready(function(){
  $(".pollOptionInput").on("keypress blur", function(e) {
    if (e.type == 'blur' || e.keyCode == 13) {
    e.preventDefault();
      //addPollOption();
      //$('.btnAdd').focus();
      console.log('EVENT!');
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<input type="text" class="pollOptionInput" />
<input type="text" class="pollOptionInput" />
<input type="text" class="pollOptionInput" />

【讨论】:

    【解决方案2】:

    这是你所期望的吗? 您可以通过这种方式在文档上传递函数:

        var myFunction = function() {
        addPollOption();
        $('.btnAdd').focus();
        //if you don't want an event occurs multiple times after one call:
        e.stopPropagation();
        }
    
        $('document')
        .keypress(myFunction)
        .blur(myFunction)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-15
      • 2013-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-23
      • 2014-08-14
      • 2021-08-14
      相关资源
      最近更新 更多