1

在页面 trigger.php 中,我正在加载 content.php,如下所示:

$(document).on('click', '#trigger', function () {
        $('#content').load('content.php');
}); 

在 content.php 我有这个 Jquery 代码:

$(function() {

    clickLike = function(el,el2) {
        alert(el+el2);
    }

    $(document).on('click', '.like', function(){
        clickLike($(this).attr('id'),'yes');
    });

    $(document).on('click', '#exit', function () { $('#content').html(''); });
    $(document).off('click', '.like', clickLike);

});

因此,当我第一次单击 #trigger 时,会加载 content.php,而当我单击 .like 时,我会收到一个警报。然后我点击退出,我再次加载 content.php,当我点击 .like 时,我现在有 2 个警报,如果我这样做 x 次,我将有 x 个警报。我不明白为什么 .off 不起作用。

4

1 回答 1

0

每次执行 content.php 中的 jQuery 代码时,都会将 .like 的 onclick 函数与一个碰巧调用 clickLike() 的匿名函数绑定。

稍后在代码中,您似乎正在尝试使用 off() 取消绑定,以避免多个事件绑定,但是您将 clickLike 指定为要删除的处理程序,而这首先不存在。

要取消绑定事件处理程序,您需要指定您绑定的确切处理程序(您不能使用匿名函数执行此操作),或者根本不指定处理程序,在这种情况下,所有处理程序都将被取消绑定。

另外,我假设您只想在“退出”处理程序中解除绑定,而不是总是像上面那样。

所以我认为以下内容对你有用(但我还没有测试过)

$(function() {

    clickLike = function(el,el2) {
        alert(el+el2);
    }

    $(document).on('click', '.like', function(){
        clickLike($(this).attr('id'),'yes');
    });

    $(document).on('click', '#exit', function () { 
        $('#content').html(''); 
        $(document).off('click', '.like');
    });

});
于 2013-04-09T11:29:49.233 回答