繁体   English   中英

jQuery点击事件不会触发[重复]

[英]JQuery click event does not trigger [duplicate]

这个问题已经在这里有了答案:

我正在做一个项目,我使用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>元素时,它不会触发相应的click事件。 代码如下:

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

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

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

委派事件的优势在于,它们可以处理来自后代元素的事件,这些事件在以后的时间添加到文档中。 通过选择保证在附加委托事件处理程序时会出现的元素,您可以使用委托事件来避免频繁附加和删除事件处理程序的需要。

只是注意,您正在清除#room中的html,然后附加trs和td

         $("#room").html("");

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

如果#room是容纳表的div,则由于您已从div中清除了表和th结构,因此将引起问题。 除非#room是表的ID,并且您只是从中清除所有trs等-但由于您没有发布html-我可以说。

而且您的所有行都将有一个<a> ,其ID为“ edit”,因为您没有在每个附加项之间进行区分。 这意味着使用此函数创建表时,您将拥有多个“ edit”的ID。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM