1
$.each(data, function(i,data) {
...[cut]...
    +"<a id=\"contact_"+data.id+"_delete\" href=\"/user/contact/delete/ticket_id/"+data.ticket_id+"/contact_id/"+data.id+"\">Delete</a>"
...[cut]...
    $("#contact_"+data.id+"_delete").live('click',function() {
        var href = this.attr('href');
        alert(href);
        return false;
    });

私は次のコードサンプルを持っています(簡単にするために無関係な部分を切り取っています)。私が持っているのは、テーブルの行(tr)を再描画する関数です。各行には、行の最後にURL / user / contact / delete / ticket_id /{$ticket_id}を呼び出す「削除」リンクがあります。

次に(同じループ内で)、クリックイベントを新しく作成されたリンクにバインドします。ただし、リンクをクリックすると、ブラウザはクリックされたリンク機能ではなく、ページを離れてURLに移動します。

まず、クリックイベントを適切にバインドしていますか?

次に、要素の「href」属性を正しく取得していますか?

4

2 に答える 2

3

言うことに加えて@charlietfl、すべての削除要素に対して単一のハンドラーを持つことができます。のように、それらすべてに同じクラスを追加し、class="contact_delete"を使用.on()してそれらすべてをターゲットにするだけです。

+'<a class="contact_delete" id="contact_'+data.id+'_delete" ...

一重引用符を使用する場合は、すべての二重引用符をエスケープする必要はないことに注意してください。

$('body').on('click', '.contact_delete', function() {
    var href = $(this).attr('href');
    alert(href);
    return false;
});
于 2012-03-07T21:36:47.993 に答える
2

jQueryメソッドを使用するには、「this」を$()でラップしてjQueryオブジェクトにする必要があります。

 var href = $(this).attr('href');

live()は非推奨です(ただし1.7.1で動作します)ので、より新しいon()メソッドの使用を検討する必要があります

于 2012-03-07T21:17:51.287 に答える