0
$('#cherub_sub1_plus').one("click",function(event){
event.preventDefault();
$(this).addClass("cross");
$(this).attr("src","new_image.png");
});

$('.cross').on("click",function(){
// nothing will execute here because I've changed the src
});

それは奇妙です。画像の src を変更すると、すべてのイベント ハンドラーも削除されます。

4

2 に答える 2

2

ソースを変更したのではなく、クラスを動的に追加したためであり、そのイベント ハンドラーは実行時に登録されています。使用する.on()

$(document).on("click", ".cross", function(){
    // nothing will execute here because I've changed the src
});
于 2013-10-17T19:51:33.840 に答える
0

次のようにコードを再構築してみてください。

$('#cherub_sub1_plus').on("click",function(e){
    var $this = $(this);
    e.preventDefault();

    if($this.hasClass('cross')){
        // do your magic
    } else {
        $this.addClass('cross').get(0).src = 'new_image.png';
    }
});

このようにして、クラスが存在するかどうかを確認し、存在する場合は何らかの魔法を実行し、存在しない場合はクラスを追加して画像の src を変更します。また、レベル クリック イベントを必要としない単一のクリック ハンドラーに統合し$(document)ます (パフォーマンスの観点からコストがかかります)。

また、あなたの割り当てを連鎖させ、srcパフォーマンス上の理由からバニラ JS メソッドを使用しました。自分を助けることができませんでした。

于 2013-10-17T19:55:51.883 に答える