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();

バグかどうかはまだjqの担当者が判断するところですが、それが原因だと思います

  1. 動作はブラウザ固有のようです
  2. 1 つの要素を持つ配列で focus() を呼び出すことが、その要素に対して具体的に呼び出すことと同じであってはならない理由はありません

みんな、ありがとう。夜。

于 2010-10-26T05:36:04.530 に答える