jQuery.one()可能是附加多个事件处理程序的坏主意吗?

时间:2014-09-23 11:26:42

标签: jquery event-handling onkeydown onkeypress

表单上有一个<input type="text">,当我点击它以使其聚焦时,我开始输入我输入的第一个字符将被忽略。输入从第二个开始填充。

页面中必须存在消耗第一个字符的内容。我怎样才能找到它是什么?

即使我在输入前多次点击输入,第一个字符也会出现问题。

在这种情况下,我所知道的唯一特点是:

  • 事先有一个<div class="overlay">覆盖了整个页面。该 叠加进入display:none;,点击一下。我试过了 使用devTools删除div,以防它仍然拦截东西,但问题仍然存在
  • 使用jQuery指令操作表单的tabindex属性

我已在Chrome37,IE11和FF32中验证了该问题。

1 个答案:

答案 0 :(得分:0)

好的,我发现了这个错误。让我们把解决方案放在这里并更改问题标题,因为它很有趣......

第十次浏览代码(显然是别人的代码......)我观察事件处理程序附加的特殊方式:

$(document).one("keydown mousedown touchstart", function(ev) {
  ev.preventDefault();
  self.hideOverlayDiv();
})
使用

$.one,可能试图避免在运行后必须显式删除事件处理程序。

问题是:在我使用mousedown事件处理程序之后,还有两个事件处理程序可以在keydowntouchstart事件上运行。当我开始填写输入时,onkeydown家伙会啜饮我的第一个字符。

我改变了这样的事情:

$(document).on("keydown mousedown touchstart", function(ev) {
  ev.preventDefault();
  self.hidePopupError();
  $(document).off("keydown mousedown touchstart");
})