0

私はdomを次から変更しています:

<div class="empty item1 ui-state-default" id="add1"></div>

これに:

<div class="item1 ui-state" id="add1">
<img src="uploads/anonymous-1367982603.png" width="45" height="60" class="expand">
</div>

.live() で動作するこのコードがありますが、これは無視され、そのコードが DOM から削除されていても .ui-state-default を実行します。

$('.expand').live('click', function(e){
var blowup = $(this);
$(blowup).css({"height":"100%","hidden":"overflow","position":"absolute","width":"100%","top":"0px","left":"0px","z-index":"100"});
$(blowup).removeClass("expand");
$(blowup).addClass("zoomy");
});     

しかし問題は、これがまだクリックで開いていることです。

$('.ui-state-default').bind('click', function(e) {
    $(".upload").show();
   });
4

1 に答える 1

2

.bind() を使用してイベント ハンドラーを登録すると、イベント登録コードが実行されるときにセレクターがテストされます。つまり、イベント ハンドラーが要素に追加されます。その後に要素に加えられた変更は、登録が解除されない限り、ハンドラの実行に影響しません。

あなたの場合、考えられる解決策は、ハンドラーが呼び出される直前にセレクターがテストされるイベント委任モデルを使用することです。

変化する

$('.ui-state-default').bind('click', function(e) {
    $(".upload").show();
});

$(document).on('click', '.ui-state-default', function(e) {
    $(".upload").show();
});

更新: バインドを使用した回避策

$('.ui-state-default').bind('click', function(e) {
    if($(this).hasClass('ui-state-default')){
        $(".upload").show();
    }
});
于 2013-05-08T03:16:38.637 に答える