2014-09-23 15 views
0

表单上有一个<input type="text">,当我单击它以使其注意焦点时,我开始键入我输入的第一个字符将被忽略。输入从第二个开始填充。jQuery.one()可能是附加多个事件处理程序的坏主意吗?

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

即使我在打字之前多次单击输入,第一个字符也会变得浑浊。

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

  • 事先有一个<div class="overlay">覆盖整个页面。单击即可将 叠加到display:none;中。我曾尝试 使用devTools删除DIV,如果它仍然拦截的东西,但问题依然
  • 形式的tabIndex属性已经使用jQuery指令

我已经验证的问题,操纵Chrome37,IE11和FF32。

+0

您可以创建一个演示(例如的jsfiddle)?无法看到或体验到代码的影响。 – 2014-09-23 12:07:44

+0

涉及的代码太多。我担心我的公司不会允许我这样做。这个问题旨在收集关于如何在页面中处理未知事件处理程序的问题的想法。 – 2014-09-23 13:04:26

回答

0

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

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

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

$.one时,可能是试图避免有运行后明确移除事件处理程序。

问题是:在使用mousedown事件处理程序之后,还有两个事件处理程序已准备好在​​和touchstart事件上运行。当我开始填写输入时,onkeydown家伙唾弃我的第一个字符。

我已经改变了这样的事情:

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