继承人jsfiddle,jsfiddle.net/kqreJ
所以我使用.bind没有问题这个功能,但后来我加载了更多的页面更新,发现.bind不适用于导入页面的内容,只适用于页面上已有的内容!太好了!
所以我把它切换到了.delegate这很酷但现在我无法弄明白如何.bind .unbind我的功能就像它一样???
使用完美的.bind功能...除了不能在ajax内容上工作.. :(
$('.open').bind("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);
}
});
}
}
});
使用未绑定的.delegate的新功能并创建多个实例?
$('#maindiv').delegate("span.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);
}
});
}
}
});
我花了好几个小时试图解决这个问题,因为我喜欢自己学习如何做,但我不得不打破并寻求帮助......感到沮丧!
我还读到,当你绑定和取消绑定.delegate时,你必须把它放在ajax内容之上吗?我尝试过使用.die()和.undelegate()...也许我只是不知道放在哪里?
答案 0 :(得分:1)
delegate
unbind
对bind
做了什么。
在你的情况下,我认为它类似于:
$('#maindiv').undelegate("span.open", "mouseup").delegate("span.open", "mouseup" ...
然后你可以将$this.unbind('mouseup', handler);
放在函数中。