【发布时间】:2018-03-07 14:31:32
【问题描述】:
我有一个发布值的 jquery 脚本:
// //Delete a product from the shopping cart
tpj('.remove').on('click', function() {
// Stop form from submitting normally
event.preventDefault();
// Get some values from elements on the page:
console.log('test');
var $remove = tpj(this).attr('id');
url = 'includes/shoppingcart.php';
// Send the data using post
var posting = tpj.post( url, { remove: $remove} );
// Put the results in a div
posting.done(function( data ) {
var content = tpj( data );
tpj( "#result" ).empty().append( content );
});
});
这第一次有效,但是当我第二次单击时,我重定向到我的主页,这是有道理的,因为.remove 类所在的锚标记在其href 中没有任何内容。然而这意味着preventdefault() 不起作用,整个点击不起作用。
这是为什么呢?我搜索了一下,发现我应该使用 .on 而不是 .click 但这并没有改变任何东西。
以下 html 行(触发 jquery):
<a href="" class="remove" id="'.$cartproduct['product'].'" title="Verwijder product">×</a>
在我的 header.php 和 shoppingcart.php 中,当创建 ajax 帖子并将 shoppingcart.php 的结果加载到我的购物车中时,链接停止正常工作。
我需要做什么?
【问题讨论】:
-
tpj( "#result" ).empty().append( content );是否会替换所有内容,包括您的“删除”按钮?如果是这样,那么由该命令呈现的新按钮将不会绑定到事件处理程序。要么更改您的代码,使其不替换不需要替换的 HTML,要么使用委托事件将事件处理程序设置在 DOM 更高层的元素上,该元素永远不会被删除,这是所有“删除”的共同祖先“ 纽扣。请参阅“直接和委托事件”部分中的api.jquery.com/on,以及有关此确切主题的所有数十个之前的 SO 问题。 -
哦,你从来没有定义过“事件”,所以 preventDefault 在任何情况下都不会起作用。
tpj('.remove').on('click', function(event) {会解决这个问题 -
是的,我的删除按钮在被替换的元素 @ADyson 内
-
@ADyson 好的,所以我删除了所有不需要替换的元素。并让我的 onclick 变成这样:
tpj('.cart_list .remove').on('click', function(event) {.cart_list永远不会被替换,但仍然是同样的问题。我能做什么? -
.remove 元素现在是否被您的 ajax 调用删除并替换?如果不是,那应该没问题(假设 .cart_list 是 .remove 的父级),但如果是,那么它将不起作用 - 这不是委托事件的语法。再次研究文档。这是一条线索:
tpj('.cart_list').on('click' '.remove', function(event) {
标签: javascript jquery ajax