1

我有一个跨度和一个文本输入,分别命名为“一”和“二”;一次只显示一个。当您双击“一”时,它会在显示和聚焦“二”时变为隐藏状态。当“二”模糊时,它隐藏并显示“一”。很简单,当我按下回车键时尝试模糊“两个”时,问题就显现出来了。这是我所拥有的:

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

当按下回车键时,切换会发生,但当您单击任意位置时会再次触发。所以它似乎模糊了火,但“两个”保持了焦点。 这是一个将两个听众分开(keyup 和 blur)的小提琴,以及一些额外的帮助突出正在发生的事情。

我试过了

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

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

4

1 回答 1

1

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

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

在我或其他人能够确定为什么 jQuery 的模糊会以这种方式运行之前,我将保持打开状态。

于 2012-04-29T01:47:19.873 回答