学习.delegate()函数...不能使用.bind

时间:2011-08-31 16:21:00

标签: jquery-selectors

继承人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);
                    }
                    });
            }
        }

});

您可以通过演示看到它仍然创建了多个实例而且没有绑定?我的大脑试图解决这个问题。

1 个答案:

答案 0 :(得分:0)

bind更改为live并更改其他内容...查看是否有效。 live()绑定动态加载的内容,例如delegate。 取消绑定live我相信你使用die

<强>更新

This is how I would do it假设您要做的只是onClick添加一个div,如果它不存在于页面上并且div确实存在则突出显示它。我不得不抛弃你的旧代码,这太混乱了,我严格按照你的要求去了。

请记住,由于委托是动态的,它会绑定到您的选择器,删除该类或更改ID,并自动从该类中删除绑定。在我的例子中,我有2个委托方法。基本上通过改变类我改变被调用的函数。