为什么$(document).on(event,sel,f);不起作用,但$(文件).find(sel).on(event,f);呢?

时间:2018-04-26 17:05:24

标签: javascript jquery iframe event-listener

我尝试使用以下代码在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中设置的。

1 个答案:

答案 0 :(得分:0)

如果包含a.report-button的元素还包含click处理程序,并且该处理程序调用{​​{1}},则事件委派将无法工作。委派取决于冒泡到绑定处理程序的元素的事件(在您的情况下为event.stopPropagation())。当事件达到document时,jQuery会检查原始目标是否与document匹配,以确定处理程序是否应该运行。 a.report-button停止冒泡,因此事件永远不会到达stopPropagation()

解决方案是将您的事件绑定到一个更靠近容器,该容器位于阻止传播的元素内。

document