如何在jQuery中删除AJAX调用后添加的元素?

我正在尝试从AJAX调用返回时删除添加到我的页面的HTML元素。 但是jQuery似乎并没有意识到这种动态添加的元素。 有解决方案?

背景

  • 我正在构建一个简单的购物车。
  • 当用户单击“添加”按钮时,我在数据库中添加项目并且我想在屏幕上显示它而不重新加载页面。
  • 由于用户可能会在购物会话中多次点击“添加”同一商品,因此每次点击时,我都想从购物车DIV中删除该商品的任何行,并仅保留该商品的最新商品。

现在,它不起作用所以我的HTML在多次添加后看起来像这样:

shirt7363

shirt7363

shirt7363

我的jQuery看起来像这样:

 function AddToCartClicked() { item_code = $("#ItemCode").val(); qty = $("#Qty").val(); $.ajax ( { type: "POST", url: "/_res/php/add-item.php", dataType: "text", data: "puid=123&code=" + item_code + "&qty=" + qty, success: function(data) { // PROBLEM: First, remove any existing line with this ID $("#Item_" + item_code).remove(); // Write new line newLine = "

" + item_code + "

"; // Add the line in the HTML $("#CartList").prepend(newLine); } } ); return true; }

我搜索了论坛,没有找到我的问题的匹配。 另外,我是新来的,所以请假设愚蠢。 谢谢。

感谢您的所有帮助,这绝对帮助我调试了这个!

最后,问题是某些项目代码中有一个句点 (“shirt235.b”),如果句点没有被转义,jQuery有一个问题就是检索它(在常见问题解答中 )。

我真的很抱歉,我使用了一个简单的虚构示例,认为item_code是什么并不重要……我已经吸取了教训,并且只会发布现实世界的代码! 请接受我的道歉并感谢您的理解。

祝你度过愉快的一周!

我认为val()仅适用于表单元素,因此在段落元素上调用它时,您没有获得有效的返回; 因此你的选择器什么也没做。

对于调试,尝试输出val()结果(item_code变量),并查看选择器返回的长度。

看起来它应该在大多数情况下都有效,但在下面可能存在以下竞争条件:

想象一下,如果用户单击添加两次,然后浏览器接收并并行运行两个回调函数。

回调不是primefaces的,它们都可以在它们中的任何一个执行“prepend”函数之前完成“remove”function。 在这种情况下,您将添加两个重复项。

一种解决方案可能是使用某种类型的ajax队列,或者使用变量来模拟“锁定”。

有点新手,但多个相同的ID是坏的。 尝试使用.attr(’data-id’,item_code)作为选择器,或创建唯一ID。