2
...

  $(document).ready(function(){

        $('form').submit(function(){
                $('input#second').focus();
                return false;
        });

        $('#first').blur(function(){
                alert('blur');
        });
  });

...

  <form>
    <input id=first><br>
    <input id=second><br>
    <input type=submit>
  </form>

...
  1. 加载页面
  2. 单击第一个输入以使其获得焦点
  3. 按 Enter 提交表单

然后发生以下情况:

  1. $('form').submit() 被调用并且
  2. 它将焦点设置为 #second 输入并退出
  3. #first 失去焦点,#second 得到它,但是......
  4. $('#first').blur()没有被调用

这是一个现场演示

我错过了什么?

谢谢

4

2 回答 2

2

尼克是对的,你的 HTML 真的搞砸了。您尚未结束输入标签或 br(s)。最重要的是,您应该将您的属性值放在输入标签中,并用双引号引起来。

这里的作品是一个演示 http://www.jsfiddle.net/dAdG8/

<script type="text/javascript">
$(document).ready(function(){
    $('form').submit(function(){
         $('input#second').focus();
         return false;
    });

     $('#first').blur(function(){
         alert('blur');
     });

     // logging
     $('input').blur(function(){
         $('pre').append('blur, ' + this.id + '\n');
     });

     $('input').focus(function(){
         $('pre').append('focus, ' + this.id + '\n');
     });
});
</script>

<form>
     <input id="first" />
     <br />
     <input id="second" />
     <br />
     <input type="submit" />
 </form>
于 2010-10-26T00:47:23.043 回答
1

根据JQuert bugtracker 上的此评论,解决该问题的方法是使用

$('input#second')[0].focus();

代替

$('input#second').focus();

是不是bug还是要jq负责人来决定,不过我猜是因为

  1. 该行为似乎是特定于浏览器的
  2. 没有理由在具有一个元素的数组上调用 focus() 不应该与专门为该元素调用它相同

谢谢大家。夜晚。

于 2010-10-26T05:36:04.530 回答