继承人jsfiddle,jsfiddle.net/kqreJ
所以我使用.bind没有问题这个功能,但后来我加载了更多的页面更新,发现.bind不适用于导入页面的内容,只适用于页面上已有的内容!太好了!
所以我把它切换到了.delegate这很酷但现在我无法弄明白如何.bind .unbind我的功能就像它一样???
$('#maindiv').undelegate(".open","mouseup").delegate(".open","mouseup",function(event){
var $this = $(this), handler = arguments.callee;
$this.unbind('mouseup', handler);
var id = $(this).attr("id");
var create = 'nope';
var regex = /\d+$/,
statusId = $('#maindiv .open').toArray().map(function(e){
return parseInt(e.id.match(regex));
});
var divsToCreate = [ parseInt(id) ];
$.each(divsToCreate, function(i,e)
{
if ( $.inArray(e, statusId) == -1 ) {
create = 'yup';
}
});
if( create == 'yup' ) {
if(id) {
$.ajax({
type: "POST",
url: "../includes/open.php",
data: "post="+ id,
cache: false,
success: function(html) {
$('.open').html(html);
$this.click(handler);
}
});
}
}
});
您可以通过演示看到它仍然创建了多个实例而且没有绑定?我的大脑试图解决这个问题。
答案 0 :(得分:0)
将bind
更改为live
并更改其他内容...查看是否有效。
live()
绑定动态加载的内容,例如delegate
。
取消绑定live
我相信你使用die
。
<强>更新强>
This is how I would do it假设您要做的只是onClick
添加一个div,如果它不存在于页面上并且div确实存在则突出显示它。我不得不抛弃你的旧代码,这太混乱了,我严格按照你的要求去了。
请记住,由于委托是动态的,它会绑定到您的选择器,删除该类或更改ID,并自动从该类中删除绑定。在我的例子中,我有2个委托方法。基本上通过改变类我改变被调用的函数。