0

クリックイベントでウィンドウポップを開く機能があります。これらの関数は、外部の js ファイルにあります。

$(document).ready(function() {
    $('a.cart-window').click(open);

    function open (){
        // function perform
        var loginBox = $(this).attr('href');
        return false;
    }   
});

すべてうまくいきます。しかし、新しく生成されたhtmlにこの関数を実装するためのajax成功呼び出しに応答して、この関数( $('a.cart-window').click(open); )を再度開始すると、機能しません。firebug がエラーを表示します (NS_ERROR_XPC_BAD_OP_ON_WN_PROTO: WrappedNative プロトタイプ オブジェクトに対する不正な操作)。

私がやろうとしているのは、長い JS 関数がたくさんあり、上記のコードに示すように open のような名前を付けて、どこからでも呼び出すことができるので、ajax 成功応答で完全なコードを記述する必要はありません。重要な注意 関数で $(this) を使用し、イベントを関数に渡したいと考えています。

ajax コード

関数 callAjax() {

$.ajax({
    url: ,
    type: "POST",
    data: 
}).done(function (msg) {

$('a.cart-window').click(開く);

});

}

4

2 に答える 2

0

動的要素を扱っている場合は、 .on()を使用してイベント委譲 (イベント伝播を使用) を使用します。

$(document).ready(function() {
    $(document).on('click', 'a.cart-window', open);

    function open (){
        // function perform
        var loginBox = $(this).attr('href');
        return false;
    }   
});

この場合、新しく更新された dom のイベント ハンドラーを再度開始する必要はありません。

于 2013-07-03T08:27:44.650 に答える
0

これを試して、

(document).ready(function() {
    $('a.cart-window').on('click',function(e){open(e)});
    function open (e){
        e.preventDefault();
        // function perform
        var loginBox = $(e.currentTarget).attr('href');// you can use e.currentTarget here
        return false;
    }   
});
于 2013-07-03T08:27:36.937 に答える