【问题标题】:Events triggered by dynamically generated element are not working由动态生成的元素触发的事件不起作用
【发布时间】:2014-12-18 14:10:14
【问题描述】:

我有一个<div>id="modal" 使用jQuery load() 方法动态生成:

$(".show-product").click(function(){

    $("#modal").load($(this).attr("href"), function(e){

        $(".details").click(function(){

我不得不将代码放在类的 click 事件中。这段代码中的详细信息,因为如果我没有运行的话。我在这两个地方都有代码,因为我也在模态之外使用它,被加倍了。

由于我在此处看到的一个示例 Stack Overflow,我动态构建的表也发生了类似的情况。它不捕获单击事件,窗口在打开模式时变暗,但它不调用 url 或加载。这段代码:

$.ajax({
    url : form,
    type: "POST",
    data : postData,
    success:function(data, textStatus, jqXHR){
        $("#dynamicTable>tbody>tr").remove();
        var x = [];
        $.each(dataSet, function(i, item) {
            x.push('<tr><td><a href="/product/' + item.product.id + '" class="details" data-toggle="modal" data-target="#modal">' + item.product.name + '</a></td>');
            x.push('<td>' + item.product.name + '</td></tr>');
        });
        $("#dynamicTable>tbody").html(x.join(""));
    },
    error: function(jqXHR, textStatus, errorThrown){
        alert('Not product found!');
    }
});
event.preventDefault()

我认为在这两种情况下事件都不起作用,因为它们是动态加载的。我在此处和 Google 上寻找并尝试进行更改,但无需复制代码(在事件 $(document).ready 和每个动态加载数据的事件中,模态窗口和加载表)。

变化:

$(document).ready(function() {

    //$(".show-product").click(function(){
    $(".show-product").on("click", function(e){

        $("#modal").load($(this).attr("href"), function(e){

            //$('.details').click(function(e){
            // ........
        });
    });
    // Added
    $(".details").on("click", function(e){
        ..........
        ..........
    });
});

这些更改仍然不起作用,仅适用于具有静态内容的页面,当我获得内容动态(模态、表格动态和其他)不起作用的事件时。

我做错了什么?

【问题讨论】:

  • 尝试将 $(".details").on("click", 改为 $("#dynamicTable").on("click", ".details", fun...跨度>
  • @Alexander 似乎很模糊,因为在这两个事件中复制代码的矿井:-S。您的代码可以重用以从非模态页面捕获事件吗?感谢您的回复;)

标签: javascript jquery twitter-bootstrap jquery-events


【解决方案1】:

将事件委托给body 解决了这个问题,因为它避免了将处理程序直接附加到动态生成的元素:

$(document.body).on("click", ".details", function(e){
  ...
});

【讨论】:

    【解决方案2】:

    您应该使用 jquery on() 来处理动态创建的元素上的事件。

    文档:http://api.jquery.com/on/

    【讨论】:

    • 和我上面说的一样吗?对我的工作来说,我把我自己回答的代码放在上面,似乎没有很好地利用这个事件。在。检查你的链接,所以我希望了解更多;-)
    猜你喜欢
    • 2012-10-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2012-11-23
    • 2017-02-13
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    相关资源
    最近更新 更多