JQuery事件在动态内容中重复
在我正在制作的网站页面中,按下按钮会导入另一个php页面的内容并将其附加到页面上。 但是,其他页面包含JQuery,每次导入内容时,click事件($(“。ExpandRoleButton”)。click)都会在之前的元素上重复。 所以,如果我添加3个元素;
元素1:重复点击事件3次
元素2:重复点击事件2次
元素3:运行一次click事件
$("#AjouterPiece").click(function() { $.blockUI({ message: '
Un moment svp.
' }); $.post("wizardincl/piste.php", {newPiste: newPiste}, function(data) { $("#wizardPistes").append(data); $.unblockUI(); $(".divNewPiste").fadeTo(300, 1); $("#nbExemplaires").attr("max", newPiste); newPiste++ $( ".ExpandRoleButton").click(function() { if ($(this).hasClass('RetractRoleButton')) { $(this).find('img').attr('src', 'images/ExpandPetitNoir.png'); var that = $(this); $(this).parent().parent().parent().parent().next().slideUp(500, function() { that.parent().parent().parent().parent().css('border-bottom', '1px solid #FF790B'); }); $(this).removeClass('RetractRoleButton'); } else { $(this).parent().parent().parent().parent().css('border-bottom', 'none'); $(this).find('img').attr('src', 'images/ExpandPetitNoirRetour.png'); $(this).parent().parent().parent().parent().next().slideDown(500); $(this).addClass('RetractRoleButton'); } }); }); });
目前,部分JQuery网站似乎失败了,经过一些搜索,我找不到任何解决问题的方法。 有没有办法让代码不再像这样重复?
这是因为您将事件绑定到多个事件处理程序。 第一次单击#AjouterPiece
,所有.ExpandRoleButton
按钮都被绑定到onclick处理程序。
下次#AjouterPiece
被点击时,它会再次被绑定。
要防止这种情况,您必须在unbind
之前使用以下代码unbind
单击处理程序
$( ".ExpandRoleButton").unbind('click')
您可以使用.click(function(e) {...})
传递事件,然后调用e.stopImmediatePropagation()
来仅触发当前处理程序,但这只能解决症状,而不是真正的问题。
编辑:确保您只通过向选择器添加上下文来绑定按钮的新实例,例如$('.ExpandRoleButton', data)
。 由于您在一个类上匹配,该选择器将获取页面上的所有按钮; 上下文允许您仅选择结果中的一个。
一个好的做法(仅用于防止发生此类问题,添加意外的多点击处理程序)是…
$(".selector").off('click').on('click', function...
要么
$(".selector").unbind('click')... $(".selector").bind('click')...