3

わからないのですが、なぜこの方法の .focus コールバックが機能しないのですか?

$('a.focus').click(function(){
    $('form input:first').focus(function(){
        console.log('done focus');         
    });
});  

ライブデモ: http://jsfiddle.net/SHxbj/

私がここで間違っていることはありますか?

4

4 に答える 4

8

このようにしないのはなぜですか:

$('a.focus').click(function() {
    $('form input:first').focus();
});
$('form input:first').focus(function() {
    console.log('focused');
});​

最初のチャンクはリンクのクリックをバインドしてカーソルを入力フィールドにフォーカスし、2 番目のチャンクはフォーカス イベントを入力フィールドにバインドし、メッセージをコンソールに送信します。

jsFiddle の例

于 2012-04-30T16:27:01.943 に答える
6
$('form input:first').focus(function(){
    console.log('done focus');         
});

そのコード ブロックは、リンクがクリックされたときにフォーカス コールバックを実行するのではなく、最初のフォーム入力にイベントをバインドしています。あなたのコードは期待どおりに機能しますが、おそらくあなたが考えている方法とは異なります。リンクをクリックしてから、最初の入力をクリックしてみてください。

あなたはおそらくこれを望んでいます:

$('form input:first').focus();
console.log('done focus');
于 2012-04-30T16:20:04.083 に答える
0

コードはコールバックをイベントにバインドしますが、focus実際には要素にフォーカスしません。それをコールバックとして保持し、手動で要素にフォーカスするか、フォーカスの後に単純に起動することができます:

編集済み; リピートバインディングを指摘してくれた@GNi33に感謝します!

var $input = $('form input:first');
$input.focus(function(){
    console.log('done focus');         
});

$('a.focus').click(function(){
    $input.focus();
});  
于 2012-04-30T16:22:20.853 に答える
0
$('a.focus').click(function(){
    $('form input:first').focus(function(){
        console.log('done focus');         
    }).focus();
});  
​

フィドル

于 2012-04-30T16:31:18.383 に答える