JQuery 单击事件不会触发


JQuery click event does not trigger

我正在做一个项目,我使用 ajax 将内容加载到页面中。

我的jquery函数是:

function load_room() {
    var sem = 0;
    $.ajax({
        url: 'ajax/room_ajax.php?option=2',
        type: 'POST',
        data: { 'sem': sem },
        dataType: "json",
        success: function (data) {
            console.log(data[0]);
            $("#room").html("");
            for (var i = 0; i < data.length; i++) {
                var x = i + 1;
                $("#room").append("<tr><td>" + x + "</td><td>" + data[i]['room_name'] + "<td><a id='edit' href='#'>edit</a></td></tr>");
            };
        }
    });
}

内容完全加载成功,但是当我单击<a id='edit' href='#'>edit</a> 元素,它不会触发相应的单击事件。代码是这样的:

$('#edit').on('click', function(){
    alert("hai")
});

您将事件绑定到 DOM 中存在的元素,这些元素在执行on()时。将动态添加的元素的事件委托给静态父级。

$('#room').on('click', "#edit", function(){
     alert("hai")
});

委托事件的优点是可以处理事件 从以后添加到文档中的后代元素 时间。通过选择一个保证存在于 附加委托事件处理程序时,可以使用委托 避免频繁附加和删除事件的事件 处理器。

请注意,

您正在从 #room 中清除html,然后附加trs'和td's

         $("#room").html("");
            $("#room").append("<tr><td>...

如果 #room 是容纳表的div,这将导致问题,因为您已经从div 中清除了表和结构。 除非 #room 是表的 id,并且您只是从中清除所有 trs 等 - 但由于您没有发布 html - 我可以说。

此外,您的所有行都将有一个 ID 为"edit"的<a>,因为您没有通过每个追加来区分它们。这意味着当使用此函数创建表时,您将有多个"编辑"ID。