1

I had an original HTML, say, like so:

<tr>
  <td class = 'greatTD' id = 'great1'>I am too great to be anything less.</td>
</tr>

Then I added an element through JavaScript like so:

function AddStuff()
{
    var s = '<tr><td class = "greatTD" id = "great2">I am even greater.</td></tr>';

    $('#foo').after(s);
}

function WireHandlers()
{
    $('.greatTD').click(GreatTDClickHandler);
}

function GreatTDClickHandler()
{
    // not being called for #great2
    // how do I make it be called?
}

$(document).ready(function() { WireHandlers(); });
4

2 に答える 2

3

イベント ハンドラーは、.greatTD要素が存在する前に、読み込み時に割り当てられています。したがって、次のようにデリゲート ハンドラーを使用する必要があります。

function WireHandlers() {
    $('#foo').on('click', '.greatTD', GreatTDClickHandler);
}

これにより、ロード時に存在する要素にイベントがアタッチ#fooされ、要素のクリック時にのみ実行されるようにフィルター処理されます.greatTD

于 2013-10-09T13:26:14.053 に答える
1

以下はうまくいくはずです。

$(document).on( 'click', '.greatTD', GreatTDClickHandler );

jQuery.on

于 2013-10-09T13:28:10.477 に答える