4

コンセプトを試すために、私は非常に簡単なテストを行っています。

最初からテキスト入力が表示されるフォームを取得しました。フィールドをクリックすると、その ID をキャプチャして、入力テキストに値を追加したいと考えています。

$(document).ready(function() {
    $('input').focus(function() {
        var currentId = $(this).attr('id');
       $("#"+currentId).val('blah');
    });
});

これは最初のフィールドではうまく機能しますが、ajax 呼び出しを使用して追加されたフィールドでは機能しなくなります。

秘訣は、ユーザーはどのフィールドでもクリックでき、クリックするまでどのフィールドかはわからないということです。私のIDは次のようになります。

experience0-CompanyName //(original one)
experience[n]-CompanyName

([n] の部分は、要素が経験、教育スキルなどによってグループ化されるため、フォーム内のフィールドを並べ替えるためにも使用されます...

どうすればこれを達成できますか?

4

4 に答える 4

5

簡単な変更:

$(document).ready(function() {
    $('input').live("focus", function() {
        var currentId = $(this).attr('id');
       $("#"+currentId).val('blah');
    });
});

.focus呼び出された時点で存在する要素にのみバインドします。.live()既存のすべての要素、および後で DOM に追加されるすべての要素のイベントに関数をバインドします。

于 2011-05-24T06:20:58.593 に答える
3

以前の回答はもはや適切ではありません。それらは現在廃止されている jQuery.live に依存しています。jQuery 1.11 では、jQuery.live を呼び出すとエラーが発生します。現在推奨されている解決策は、 jQuery.on を使用することです。上記の jQuery.live コードの実装は次のようになります。現在「:input」に設定されている 2 番目のパラメーターは、必要に応じてセレクターに置き換えることができます。

$( "body" ).on('focus', ":input", function() {
    var currentId = $(this).attr('id');
    $("#"+currentId).val('blah');
});
于 2014-06-09T15:36:11.010 に答える
1

もっと簡単にできます (ID を取得して検索する必要はありません):

$(document).ready(function() {
    $('input').live('focus', function() {
        $(this).val('blah');
    });
});
于 2011-05-24T06:22:04.337 に答える
0

を使用していると思います$("<someid>").focus(<function>)。これは、追加された新しいタグではなく、既に読み込まれているドキュメントで機能します。

Try using $("<someid>").live("focus", <function>);

また、jquery Web サイトもご覧ください。彼らは、例を含む非常に優れたドキュメントを入手しました。ライブについては、これをチェックしてください http://api.jquery.com/live/

于 2011-05-24T06:20:48.500 に答える