好我创建元素,分配点击处理程序,并将其附加到正文.然后我删除它并重新加载它并单击处理程序不再工作???
为什么会这样呢?
var btn = $('<button>').text('hi').click(function(){console.log(3);});
var div = $('<div>');
div.append(btn);
$('body').append(div);
//click it now, it works..
div.html('');
div.append(btn);
// now button doesn't work..
Run Code Online (Sandbox Code Playgroud)
那么为什么会发生这种情况,我该怎么做才能解决它.
由于.html('')基本相同.empty(),以下适用(来自jQuery文档):
为了避免内存泄漏,jQuery在删除元素本身之前从子元素中删除了其他构造,如数据和事件处理程序.
如果要删除元素而不破坏其数据或事件处理程序(以便以后可以重新添加),请
.detach()改用.
一种选择是使用事件委托.在这样做时,事件不直接绑定到button元素,它绑定到未删除的常量父元素.
$(document).on('click', 'button', function () {
    // ..
});
Run Code Online (Sandbox Code Playgroud)
如上所述,另一种选择是使用该.detach()方法从DOM中删除元素,而不删除附加的事件侦听器.
该
.detach()方法是一样的.remove(),不同之处在于.detach()保持与删除的元素相关联的所有的jQuery的数据.当删除的元素稍后要重新插入DOM时,此方法很有用.
div.find('button').detach();
div.append(btn);
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           2826 次  |  
        
|   最近记录:  |