6

奇妙な理由で、この単純な関数は機能しないようです。

$("body").on("focus", this, function(){
    alert('d');
})

thisinputまたはtextarea要素です。

私がこれを行うとしたら:

$(this).on("focus", function(){
    alert('d');
})

現在存在する要素では機能しますが、新しく作成された要素ではイベントが発生しません。何が間違っているのでしょうか。

4

3 に答える 3

9

2番目のパラメーターは、APIで説明されているように、「イベントをトリガーする選択された要素の子孫をフィルター処理するためのセレクター文字列」です。

thisあなたの場合、DOM要素だと思います。入力またはテキストエリアに一致するようにセレクターに変更してみてください。これにより、セレクターに一致する要素からfocusイベントが発生するたびに関数が呼び出されます。bodyこれはあなたのために働くはずです:

$("body").on("focus", "input, textarea", function() {
    alert('d');
});

詳細については、 http on()//api.jquery.com/on/をご覧ください。

于 2012-12-28T00:56:51.190 に答える
1

@ grantman16が、2番目のパラメーターはセレクターでなければならないと述べているように、

しかし、それが新しく作成された要素である場合は、 focus()を使用してみませんか。

​va​r input = $("<input>");
input.focus(function() {
  alert('d');
});
$("body").append(input);​
​

例-1

を使用する必要はありませんが、使用.onすることに固執する場合は、セレクターを2番目のパラメーターとして設定する必要があります。

var input = $("<input>").addClass("lastInput");
$("body").on("focus", "input.lastInput", function() {
  alert('d');
});
$("body").append(input);
​

例-2

于 2012-12-28T01:12:21.563 に答える
0

あなたはこのようなものが欲しいです:

$(document).ready(function() {
    $("body").on("focus", 'textarea, input', function(){
       console.log('d');
    })​
});
于 2012-12-28T00:53:31.707 に答える