在一个页面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不起作用。
答案 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');
});
});