【问题标题】:How to access dynamically added element with jquery如何使用 jquery 访问动态添加的元素
【发布时间】:2017-02-28 18:19:22
【问题描述】:

我有一些来自数据库的帖子。这些帖子在页面被 ajax 加载后被添加到页面中。我在每个帖子上添加一个删除按钮,每个按钮都有一个 ID。这是我的代码:

<i class="fa fa-trash" id="unique-id"></i>

现在我想通过 onclick() 方法上的 id 在 jQuery 中访问这些按钮,但问题是这些按钮是在页面加载后添加到页面中的,我猜 jQuery 方法只能在文档就绪函数中调用.所以目前我通过以下方式这样做:

<i class="fa fa-trash" onclick="delPost('id')"></i>

这里有一些javascript:

function delPost(id) {

    var post_id = id;
    var post = "#post_"+id;

    $(post).fadeOut(300, function() {
        $.ajax({

            type : 'POST',
            url  : 'update.php',
            data: ({id : post_id, act : "rem-post"}),
            success : function()
            {
                // Some Function
            }
        }); //End of Ajax
    });

}

我想用 jQuery 调用这个函数...这可能吗??

【问题讨论】:

标签: jquery ajax dom


【解决方案1】:

编辑

那么你想像这样使用id

<i class="fa fa-trash" id="unique-id"></i>

然后,试试这个功能:

$(document).on('click','.fa-trash',function(){

    var post_id = $(this).attr('id');

    $(this).closest(".post").fadeOut(300, function() {
        $.ajax({

            type : 'POST',
            url  : 'update.php',
            data: ({id : post_id, act : "rem-post"}),
            success : function()
            {
                // Some Function
            }
        }); //End of Ajax
    });
});

它将正确的id 传递给Ajax 并淡出它的.post 父级。

你的函数的问题是没有检索到正确的id...
但是要使用它进行 jQuery 查找。

在这一行:

$(post).fadeOut(300, function() {

即使使用正确的id,您要定位的元素不在 dom 中。

【讨论】:

  • 我当前的代码运行良好,但我只想删除 的 onclick 函数,而我想从脚本中的 jquery onclick 方法调用此方法。
  • 当我选择 类说 .delete 时,它​​将选择所有 类的 .delete 元素并将它们存储在数组中,所以我必须指定索引:var id= $ (this).attr('id');获取id
  • 我不明白你的阵列想法。我坚持你想要一个 onclick 淡出和 ajax 更新。
  • 哦,我明白了……请原谅我有点困惑……非常感谢您的解决方案运行良好:-)
【解决方案2】:

我会这样做:

HTML:

<div class="post">
    ...
    <i class="fa fa-trash deleteButton" data-id="unique-post-id-here"></i>
</div>

Js:

$(body).on("click", ".deleteButton", function() {
    var post_id = $(this).attr("data-id");
    delPost(post_id);
});

我为“on”事件选择了“body”元素,因为它要与动态添加的元素一起工作,必须在静态元素上调用它,这些元素从一开始就存在。你也可以使用一些“.posts-container”元素或类似的元素,你只需要确保页面加载时它就在那里。

【讨论】:

  • 当我选择 类说 .delete 时,它​​将选择所有 类的 .delete 元素并将它们存储在数组中,所以我必须指定索引:var id= $ (this).attr('id');获取id
  • 您不应该使用按钮的类进行选择,而是使用“this”选择器,正如我在代码中所写的那样。它应该只选择被点击的按钮。
【解决方案3】:

您可以在这里使用事件委托概念。

尝试仅向文档中具有类 fa-trash 的图像添加事件。通过委托,它会处理属于 dom 的所有图像,即使它们也是动态添加的

检查以下sn-p

$(document).ready(function(){
  $(document).on('click','i.fa-trash',function(){
      var id= $(this).attr('id')
      //alert(id)
     // delPost(id);
  });
});


function delPost(id) {

    var post_id = id;
    var post = "#post_"+id;

    $(post).fadeOut(300, function() {
        $.ajax({

            type : 'POST',
            url  : 'update.php',
            data: ({id : post_id, act : "rem-post"}),
            success : function()
            {
                // Some Function
            }
        }); //End of Ajax
    });

}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<i class="fa fa-trash" onclick="delPost('id')" id="unique-id">this is del</i>
<i>hello</i>

【讨论】:

  • 当我选择 类说 .delete 时,它​​将选择所有 类的 .delete 元素并将它们存储在数组中,所以我必须指定索引:var id= $ (this).attr('id');获取id
  • 是的,这就是你必须做的。在代码中我试图访问 id 并将其传递给函数
  • 但是我怎么能从元素数组中知道点击了哪个元素??
  • 不完全清楚你在问什么,但是当你点击一张图片时,当有一系列图片广告时,你将能够访问特定的图片详细信息
  • 哦,我明白了……请原谅我有点困惑……非常感谢您的解决方案运行良好:-)
【解决方案4】:

从元素中移除 onclick,并添加一个 id 和/或类(例如 class="deleteThis" data-id="4483339")。 然后在 document.ready 中创建一个事件处理程序,如下所示:

$( ".deleteThis" ).on( "click", delPost( $(this).attr('data-id' );

示例代码见http://api.jquery.com/on/

【讨论】:

  • 你在跟我说话吗?如果是的话,我没有投反对票……即使我是新人也不能投票:-)
  • 不,不是对你 :),而是对那些投反对票但让我一无所知的人,我的回答有什么问题。
猜你喜欢
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
  • 1970-01-01
  • 2012-08-14
  • 1970-01-01
  • 2018-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多