帮助jquery中的焦点/模糊语义

时间:2010-10-26 00:42:14

标签: jquery focus blur

...

  $(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键提交表单
  4. 然后发生以下情况:

    1. $('form')。调用submit()并
    2. 将焦点设置为#second输入并退出
    3. #first失去焦点,#second得到它,但是......
    4. $('#first')。模糊()未被称为
    5. 这是live demo

      我错过了什么?

      由于

2 个答案:

答案 0 :(得分:2)

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

此处的作品是demo 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>

答案 1 :(得分:1)

据JQuert bugtracker的this comment报道,解决问题的方法是 使用

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

而不是

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

是否是一个bug仍然由jq负责人决定,但我猜这是因为

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