1

我有一些 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>";

追加后,没有 jQuery 事件在新的 HTML 上起作用。

4

2 回答 2

4

您需要委托您的活动.on()

您可以在此处专门阅读有关此内容

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

所以而不是这个......

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

做这个

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

为什么?

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

由于事件冒泡,树上的所有 DOM 元素都会听到它们的后代事件(除非传播已停止),并且可以相应地对它们采取行动。

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

于 2013-02-08T23:55:32.843 回答
3

您可能正在将事件绑定到元素:

$('button').click(function() {
    ...
});

这仅在$('button')选择器返回您想要的元素时才有效。您的问题是选择器被调用一次。它不会更新以考虑在调用选择器后创建的元素。

您应该使用事件委托语法将事件绑定到已经存在的父元素:

$('#parent').on('click', 'button', function() {
    ...
});

这样,当#parent接收到一个click事件时,它会寻找匹配的元素button并将事件传递给它们。

于 2013-02-08T23:56:17.803 回答