元素在触发模糊后保留焦点

时间:2012-04-26 00:20:18

标签: jquery blur preventdefault

我有一个跨度和一个文本输入,彼此相邻,分别命名为“一个”和“两个”;只有一个一次显示。当您双击“一个”时,它会在显示并聚焦于“两个”时隐藏。当“两个”模糊时,它会隐藏并显示“一个”。很容易,当我按下回车键时我试图模糊“两个”时,问题就出现了。这就是我所拥有的:

.bind({'blur keyup': (function(e){
  if(e.type === 'keyup' && e.keyCode !== 10 && e.keyCode !== 13) return;
  $([this,$(this).prev()]).toggle(); })
 })

按下回车键时,会发生切换,但在您点击任意位置时会再次触发。所以它似乎模糊不清,但“两个”保留了焦点。 Here is a fiddle has the two listeners separated (keyup and blur) as well as some extra to help highlight what's happening.

我试过

  • 添加e.preventDefault()
  • 添加return false(模糊前) - >杀死其余功能(如预期的那样)
  • 添加return false(模糊后) - >禁用回车键(??)或之后:
    • keyup:(return function(e){ - > jQuery不喜欢这种语法
  • 在不同的功能中执行.toggle() - >没有区别,除非:
    • setTimeout(即使时间为0) - >问题消失了
  • 使用不同的监听器(键[down / press]) - >没有区别
  • 调用单独的函数 - >没有区别

问题:我该如何解决这个问题?预期的行为是按下回车键产生与模糊相同的操作。

1 个答案:

答案 0 :(得分:1)

虽然我不确定为什么,但我被jQuery的模糊方法杀死了。我能够通过分离两个处理程序并使用JavaScript的原生模糊方法来解决我的问题。

keyup: (function(e){
  if(e.keyCode===10 || e.keyCode===13){ this.blur(); }
}),
blur: (function(){
  $([this,$(this).prev()]).toggle();
})

我将保持开放,直到我或其他人能够确定为什么jQuery的模糊表现为这样。