1

誰かがこのコードを見てください.

 $('ul#showUsernames li').on('click', function () {
    selectedUsername = $(this).text();
    if (selectedUsername != chatUsername) {
        chatTitleName.text("Chat between " + chatUsername + " and " + selectedUsername);
    }
 });

ここで私は使用.clickしましたが、それらもbind('click',function機能しませんでした。

jQueryを介して要素を動的onに生成しているため、ここで使用しています。li

プロジェクトでSignalRを使用していることがここで重要かどうかはわかりません。

助けてください。

4

4 に答える 4

5

イベント委任を使用するon()

$('#showUsernames').on('click', 'li', function () {
   ...

これは、動的に挿入されたリスト項目に対しても機能し、パフォーマンスが向上します (要素のnハンドラーではulなく、単一のイベント ハンドラーをアタッチするためです。li

補足として、より高速なので$('#showUsernames')代わりに使用してください(ストレートのようなものです)$('ul#showUsernames')getElementById

于 2013-01-04T12:57:36.917 に答える
2

on() を使用する

$('ul#showUsernames').on('click', 'li', function () {
于 2013-01-04T12:58:44.430 に答える
0

Jquery Liveを使用できます

$('li ul#showUsernames').live('click',function () {

ライブは非推奨でも使用できます(@Mr_Greenに感謝)

$('ul#showUsernames').on('click', 'li', function () {
于 2013-01-04T13:01:46.573 に答える
0

使用するlive()

例:

$(".button").live("click", function() {
});

次のように、必ず呼び出してくださいdie()

$(".button").die();

die() は、イベントが複数回発生するのを防ぎます。このシナリオは、コンテンツがページ全体の同期リロードなしで複数回非同期にロードされている場合に発生します。これは、古いハンドラーがブラウザーのメモリに残り、それらも起動されるためです (簡単な説明)。

それが役に立てば幸い。

于 2013-01-04T13:01:55.563 に答える