使用.bind,但现在必须使用.delegate ...尝试过.undelegate?

时间:2011-08-31 00:47:48

标签: jquery-selectors

继承人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()...也许我只是不知道放在哪里?

1 个答案:

答案 0 :(得分:1)

查看undelegate

delegate unbindbind做了什么。

在你的情况下,我认为它类似于:

$('#maindiv').undelegate("span.open", "mouseup").delegate("span.open", "mouseup" ...

然后你可以将$this.unbind('mouseup', handler);放在函数中。