4

重複の可能性:
jQuery 1.7-live()をon()
.live()vs .on()メソッドに変換

次のコード(これを簡略化したもの)があり、jquery-1.7と一緒に正常に機能しました。

$("td.ui-datepicker-week-col a").live("click", function () {
    alert("hello");
});

コードをアップグレードしようとしているので、jQueryパックのバージョンをアップグレードできるので、これに変更しました。

$("td.ui-datepicker-week-col").on("click", "a", function () {
    alert("hello");
});

ただし、これは何もしません。エラーもスローされないので、どこに問題があるのか​​わかりません。

何か案は?

4

5 に答える 5

9

開始時に要素がない場合は"td.ui-datepicker-week-col"、既存の永続セットを選択する必要があります。例えば

$(document).on("click", "td.ui-datepicker-week-col a", function () {
    alert("hello");
});

onとは異なり、この関数liveは、バインディング関数を呼び出したときに定義されたセットでのみ機能します。on動的なのは、イベントが発生したときに引数として渡されるセレクターの解釈です。

于 2013-01-16T16:04:59.747 に答える
3

onステートメントの最初の部分は、呼び出し時にすでに存在する要素にバインドされます。委任を適切に使用するには、その時点で存在し、イベント要素の親要素であることが保証されている要素を選択する必要があります。他に何もなければ、いつでも使用できますdocument(これliveもそうです!)

$(document).on("click", "td.ui-datepicker-week-col a", function(e) { /*...*/ });
于 2013-01-16T16:05:40.947 に答える
1
$("body").on("click", "td.ui-datepicker-week-col a", function () {
    alert("hello");
});
于 2013-01-16T16:05:35.190 に答える
1

問題は"td.ui-datepicker-week-col"、ページがロードされてonイベントが添付されたときにDOMに存在していなかったことである可能性があります。

ハンドラーを親要素にアタッチします。親要素は、JavaScriptコードのロード時に存在します。最も単純な(そしてさらに悪いが、機能している)のは次のとおりです。

$("body").on("click", "td.ui-datepicker-week-col a", function () {
  alert("hello")
})

これはドキュメントをクリックするたびにトリガーされ、jQueryはクリックされた要素が正しいかどうかを確認し"td.ui-datepicker-week-col a"、trueの場合はコールバックを実行します。

これを行うためのより効率的な方法は、確実に存在する既存のサブコンテナに接続する"td.ui-datepicker-week-col a"ことです。

于 2013-01-16T16:09:48.347 に答える
0

これを試して...

$('.ui-datepicker-week-col').on('click', 'a', function () {
    alert("hello");
});

そして、この例を参照してください

ご挨拶。

于 2013-01-16T16:12:26.723 に答える