2012-04-26 39 views
1

我有一个跨度和文本输入相邻,分别命名为“一”和“两”;一次只显示一个。当你双击“one”时,它会在显示和关注“two”时变得隐藏。当“两”模糊时,它隐藏并显示“一”。很简单,当我按下回车键时,试图模糊“两个”,问题就会显现出来。这里是我有什么:元素触发后保持焦点模糊

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

当enter键被按下,切换发生,但点击任何地方时再次触发。所以看起来模糊不清,但“两个”仍然是焦点。 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时) - >问题消失
  • 使用不同的监听器(键[下/按]) - >无差异
  • 调用单独的函数 - >没有区别

问:我怎样才能解决这个问题?预期的行为是按Enter键产生与模糊相同的操作。

+0

而不是强制键入处理程序中的模糊,您可以将焦点设置为另一个元素 – 2012-04-26 01:25:19

+0

虽然这确实有效,我真的没有其他输入,我想切换焦点。如果我可以“关注”文档本身或者(最好)找到导致此行为的原因,那将是理想的。 – Gary 2012-04-26 01:36:50

+1

其实这很有趣,如果你不隐藏输入,触发模糊效果很好。切换输入会导致问题! – 2012-04-26 01:41:14

回答

1

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

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

我会离开这个打开,直到我或其他人能够确定为什么jQuery的模糊行为是这样的。

相关问题