Jquery 在一组字段失去焦点时触发主干事件

Jquery 在一组字段失去焦点时触发主干事件,jquery,backbone.js,Jquery,Backbone.js,当有人在两个input字段之一之外单击时,尝试触发主干事件。这会在单击外部时正确触发,但我希望在单击其他字段时不会触发 var ItemView = Backbone.View.extend({ events: { 'blur input': 'blurInputs' }, blurInputs: function(){ if ( $('input.description').is(":focus") || $('input.amount').is(":focus

当有人在两个
input
字段之一之外单击时,尝试触发主干事件。这会在单击外部时正确触发,但我希望在单击其他字段时不会触发

var ItemView = Backbone.View.extend({

  events: {
    'blur input': 'blurInputs'
  },

  blurInputs: function(){
    if ( $('input.description').is(":focus") || $('input.amount').is(":focus") ){
      // do nothing
    } else {
      // do something
    }
  }

});

问题可能是因为模糊事件是在另一个输入框获得焦点之前触发的

一种可能的破解方法是在检查输入框是否有焦点之前等待几毫秒

blurInputs: function() {
  setTimeout(function() {
    if (this.$('input.description').is(':focus') || this.$('input.amount').is(':focus')) {
      // do nothing
    } else {
      // do something
    }
  }, 50);
}

这是基于Paul的答案,但在我的用例中效果很好

  onBlur: function(e) {
    var self = this;
    setTimeout(function() {
      if(self.$el.find('input:focus').length == 0) {
        console.log("BLUR");
      }
    }, 500);
  },

与检查模糊事件相比,您是否尝试过侦听单击事件?我还没有,这可能会起作用,但实现起来要复杂得多。如果单击除其中一个输入之外的任何位置,那么一个想法就是在页面中添加一个透明的div,其z索引高于除两个输入或其他您关心的元素之外的所有内容,那么您只需聆听对该div的单击。当用户单击它时,您可以将其隐藏,当输入获得焦点时显示出来。是的,这不是个糟糕的主意。但是你失去了点击其他东西的能力。第一次点击是“清除”点击,然后你必须再次点击才能真正完成你想要做的事情。模糊是完美的(如果它工作的权利),我明白你的观点。我通常在我的主干应用程序中做的一件事是具有全局单击绑定功能,每个单击事件都会路由到该功能。这将允许您进行输入逻辑检查。否则,如果你真的被模糊解决方案困住了,我认为黑客是你唯一的选择。这确实有效,但绝对感觉像是黑客。不过,现在必须这样做。