【问题标题】:BackboneJS 'click' event not firing when 'focusout' event exists当存在“focusout”事件时,BackboneJS“click”事件未触发
【发布时间】:2017-09-12 12:34:50
【问题描述】:

我有一个视图,我在其中触发下拉菜单,当文本输入在 BackboneJS 中成为焦点时提供许多选项(类似于 Select2 的想法):

events: {
   'click .option': 'clickItem',
   'focusin .big-select-input': 'focusIn',
   'focusout big-select-input': 'focusOut'
},

focusIn: function() {
   this.$el.find('.big-select-options').show();
},

focusOut: function() {
   this.$el.find('.big-select-options').hide();
},

clickItem: function() {
   console.log('item clicked');
}


<input type="text" class="big-select-input" />
<div class="big-select-options" style="display:none;">
<div class="option">Item</option>
<div class="option">Item</option>
<div class="option">Item</option>
<div class="option">Item</option>
</div>

我注意到的是,当“focusout”事件存在时,该选项的点击事件不会触发。如果我删除了 focusout 事件(或 blur 事件),则单击有效。

如何让 click 和 focusout 同时工作?

这是一个简单的例子http://jsbin.com/bivilujili/1/edit?html,js,console,output

【问题讨论】:

标签: javascript jquery backbone.js underscore.js


【解决方案1】:

如果我理解正确,您认为您正在单击一个选项,但实际上并非如此。当您尝试单击一个选项时,输入必须失去焦点。当输入失去焦点时,您将隐藏选项的容器。所以你不能再点击它了。他们只是躲起来。

您需要更新您的逻辑以不隐藏它们。

【讨论】:

  • 嗯,我需要焦点输出和点击才能工作。例如,如果用户单击页面上的任何其他位置,则需要隐藏 big-select-options。当一个选项被点击时,它需要做同样的事情。
  • @David 然后在焦点输出中,您需要确保即将获得焦点的元素不是选项本身,并防止在即将获得焦点时隐藏它。据我所知,这方面有很多浏览器怪癖。
猜你喜欢
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多