Jquery 动态创建的元素上的事件绑定无法工作

Jquery 动态创建的元素上的事件绑定无法工作,jquery,dynamic,bind,element,Jquery,Dynamic,Bind,Element,我正在使用购物车,并在会话中存储好的信息。 我使用ajax在html页面中创建购物车,通过它我可以将商品添加到购物车中,并且可以正常工作。但是,当我想从购物车中删除商品时,它无法正常工作。此外,我必须刷新页面以删除商品。 我的代码如下: cart.php 类CartController扩展控制器{ 公共函数构造(){ 父项::_构造(); //会话(空); 如果(!isset($\u会话['cart'])){ $\u会话['cart']=array(); } } 公共职能指数(){ kd(美元会

我正在使用购物车,并在会话中存储好的信息。
我使用ajax在html页面中创建购物车,通过它我可以将商品添加到购物车中,并且可以正常工作。但是,当我想从购物车中删除商品时,它无法正常工作。此外,我必须刷新页面以删除商品。
我的代码如下:
cart.php

类CartController扩展控制器{
公共函数构造(){
父项::_构造();
//会话(空);
如果(!isset($\u会话['cart'])){
$\u会话['cart']=array();
}
}
公共职能指数(){
kd(美元会议);
}
公共功能附加项(){
/*
*待办事项--安全方面的考虑
*/
$good_id=intval(I('post.good_id');
如果(isset($\u会话['cart'][$good\u id])){
$\会话['cart'][$good\u id]['good\u num']+=1;
$html='';
$total_price=0;
foreach($_会话['cart']作为$k=>$v){
$total_price+=$v[‘good_price']*$v[‘good_num'];
$html.=''.$v['good_price'].';
}
$html.='商品数量:'.计数($_会话['cart'])。总计:¥。$总价;
退出($html);
}
$good_name=I('post.good_name');
$good_price=I('post.good_price');
$good_image=I('post.good_image');
$good_num=intval(I('post.good_num');
$good=compact('good_id','good_name','good_price','good_image','good_num');
$\u会话['cart'][$good\u id]=$good;
$html='';
$total_price=0;
foreach($_会话['cart']作为$k=>$v){
$total_price+=$v[‘good_price']*$v[‘good_num'];
$html.=''.$v['good_price'].';
}
$html.='商品数量:'.计数($_会话['cart'])。总计:¥。$总价;
退出($html);
}
公共功能删除项(){
$good_id=intval(I('post.good_id');
取消设置($_会话['cart'][$good_id]);
$html='';
$total_price=0;
foreach($_会话['cart']作为$k=>$v){
$total_price+=$v[‘good_price']*$v[‘good_num'];
$html.=''.$v['good_price'].';
}
$html.='商品数量:'.计数($_会话['cart'])。总计:¥。$总价;
退出($html);
}
}
shoppcart.html

<!-- shopping cart wrapper start -->
<form id="shoppingCartWrapper" class="shoppingCartWrapper" action="#" method="post">
  <fieldset>        
    <?php 
      $total_price = 0;
      foreach($_SESSION['cart'] as $k=>$v){
        $total_price += $v['good_price']*intval($v['good_num']);
    ?>
    <!-- shopping cart product starts -->
    <div class="shoppingCartProductWrapper"> 
      <a href="<?php echo DOMAIN.'/mall/index/gooddetail/id/'.$v['good_id'].'.html'; ?>" class="shoppingCartProductImageWrapper">
        <img src="<?php echo $v['good_image']; ?>" class="shoppingCartProductImage" alt=""/>
      </a>
      <div class="shoppingCartProductInfoWrapper"> 
        <a href="<?php echo DOMAIN.'/mall/index/gooddetail/id/'.$v['good_id'].'.html'; ?>" class="shoppingCartProductTitle"><?php echo $v['good_name']; ?></a>
        <div class="shoppingCartProductButtonsWrapper">
          <input type="text" class="shoppingCartProductNumber" name="product-3" value="<?php echo $v['good_num']; ?>"/>
          <input type="hidden" name="good_id" value="<?php echo $v['good_id']; ?>" />
          <span class="shoppingCartProductPrice">¥<?php echo $v['good_price']; ?></span><a href="javascript:void(0)" class="shoppingCartRemoveProductButton"></a> </div>
      </div>
    </div>
    <!-- shopping cart product ends --> 
    <?php } ?>

    <!-- shopping cart info wrapper starts -->
    <div class="shoppingCartInfoWrapper"> 
      <span class="shoppingCartProductsNumber">商品数量: <?php echo count($_SESSION['cart']); ?></span> 
      <span class="shoppingCartProductsTotal">Total: ¥<?php echo $total_price; ?></span> 
    </div>
    <!-- shopping cart info wrapper ends -->

    <div id="shoppingCartButtons" class="shoppingCartButtonsWrapper"><a href="" class="shoppingCartEmptyButton">清空</a>
      <input type="submit" value="去付款" id="shoppingCartCheckoutButton" class="shoppingCartCheckoutButton"/>
    </div>
  </fieldset>
</form>
<!-- shopping cart wrapper ends --> 
<script type="text/javascript">
    $(function(){
      remove_url = "{:U('mall/cart/removeitem')}";
      $('#shoppingCartWrapper').find('.shoppingCartRemoveProductButton').on('click',function(){
        good_id = $(this).prev().prev().val();
        $.ajax({
          'url': remove_url,
          'type': 'post',
          'data': {'good_id': good_id},
          'success': function(data){
                $('#shoppingCartButtons').prevAll().remove();
                $('#shoppingCartButtons').before(data);
          }
        });
      });
    });
</script>

商品数量:  
总计:¥
$(函数(){
删除_url=“{:U('mall/cart/removietem')”;
$(“#shoppingCartWrapper”).find(“.shoppingCartRemoveProductButton”).on('click',function(){
good_id=$(this.prev().prev().val();
$.ajax({
“url”:删除url,
'type':'post',
'data':{'good_id':good_id},
“成功”:函数(数据){
$(“#购物车按钮”).prevAll().remove();
$(“#购物车按钮”)。之前(数据);
}
});
});
});

对不起,我的英语不好!希望我能清楚地描述我的问题,如果没有,我也会把代码放在网上,地址:。

请帮助我…

问题是删除事件的选择器。
您希望单击“删除”按钮,但该按钮是通过dom显示的,而不是通过文档加载显示的

尝试将选择器更改为侦听事件的文档。单击“添加选择器”

$('#shoppingCartWrapper').find('.shoppingCartRemoveProductButton').on('click',fu‌​nction(){ ...


如果我试着在控制台中运行ajax,它会按照您的期望工作得很好

尝试更改$('#shoppingCartWrapper')。查找('.shoppingCartRemoveProductButton')。在('click',函数(){…for..$(文档)。在('click','shoppingCartWrapper.shoppingCartRemoveProductButton',函数(){…它不能工作,我改变了我的代码,就像你说的,当我点击删除按钮时,它可以启动一个ajax请求,但是好的不能从购物车中删除,我仍然需要刷新页面对不起,这是我的错。你的方法很好,问题是我不能准确地获得好的id
$('#shoppingCartWrapper').find('.shoppingCartRemoveProductButton').on('click',fu‌​nction(){ ...
 $(document).on('click', '#shoppingCartWrapper .shoppingCartRemoveProductButton', function() {...