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() 一起使用,但它忽略了这一点并执行 .ui-state-default,即使该代码已从 DOM 中删除。

$('.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 回答