我尝试使用以下代码在iframe中使用jquery设置事件监听器:
function reportThanks() {
//$(document).find('a.report-button').on('click', function (event) {
$(document).on('click', 'a.report-button', function (event) {
alert("Thx!");
});
}
使用当前(未注释)代码,alert()
未被触发。但它与前一个(评论)相符。
那些可以解释一个有效的,另一个没有的有什么区别?
问题是否与same origin policy有关,因为它在iframe中?
注意:事件监听器是在iframe中设置的。
答案 0 :(得分:0)
如果包含a.report-button
的元素还包含click
处理程序,并且该处理程序调用{{1}},则事件委派将无法工作。委派取决于冒泡到绑定处理程序的元素的事件(在您的情况下为event.stopPropagation()
)。当事件达到document
时,jQuery会检查原始目标是否与document
匹配,以确定处理程序是否应该运行。
a.report-button
停止冒泡,因此事件永远不会到达stopPropagation()
。
解决方案是将您的事件绑定到一个更靠近容器,该容器位于阻止传播的元素内。
document