jquery,我的函数被称为x次而不是一次

时间:2013-04-09 11:14:01

标签: jquery

在一个页面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,当我点击时。就像我有一个警告。然后我点击退出,我再次加载content.php,当我点击时。我现在有2个警报,如果我这样做了x次,我将有x警报。我不明白为什么.off不起作用。

1 个答案:

答案 0 :(得分: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');
    });

});