javascript - 添加了 .append() 的 HTML 不会触发事件

标签 javascript html jquery jquery-events

我有一些 jQuery 从 PHP 脚本附加 HTML。

jQuery

$.ajax({
    type: "POST",
    url: "newPage.php",
    data: data,
    cache: false,
    success: function(html)
    {
        $('.item1 ul').append(html);
    }
});

PHP

    echo"<li><a href=\"#\">".$pages["title"]."<img src=\"images/delete.jpeg\" class=\"delete del-page\" id=".$pages["pages_id"]." title=\"Delete Page\"/><img src=".$state." class=\"page-state\" id=".$pages["pages_id"]." title=\"Page On\"/></a></li>";

附加后,新 HTML 上没有任何 jQuery 事件起作用。

最佳答案

您需要使用 .on() 委托(delegate)您的事件

你可以具体阅读这个here

但基本上您需要在 DOM 层次结构中将监听器附加到更高的位置。

所以不是这个...

$('.selector').on('event', function(e) {...});

这样做

$('.item1 ul').on('event', '.selector', function(e) {...});

为什么?

这是有效的,因为当您绑定(bind)事件时,页面上尚未出现的动态元素仍会触发事件,只是它们没有处理程序。

感谢event bubbling树上的所有 DOM 元素都将听到其后代的事件(除非传播已停止),并可以相应地对其进行操作。

在此示例中,当 '.item1 ul' 听到 'event' 已从其子元素之一触发时,如果它是 ' .selector' 触发它,处理程序将触发。

关于javascript - 添加了 .append() 的 HTML 不会触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14783268/

相关文章:

html - 如何处理文本溢出。是否有与 IE 和 Safari 的文本溢出样式等效的 Firefox?

html - 每行获取两个输入并修改提交宽度

javascript - 从数据编号更改 css

javascript - 我对 Papaparse 的定义变得不确定

javascript - 如何使我的 Etch-A-Sketch 网格在悬停时改变颜色和不透明度?

javascript - IE11 上的 SVG 自然宽度

javascript - 数据属性的 jQuery 自定义事件

javascript - Bootstrap 表加载外部数据 - 未找到匹配的记录

javascript - 使用相同的 javascript 自动填充多个 div

json - 将 JSON 解析为 javascript 数组