1
AlwaysBee 2017-09-24 14:49:15 +08:00 via iPhone
代理事件、动态绑定
|
3
coolcoffee 2017-09-24 21:03:02 +08:00
因为你后面生成的元素没有绑定到事件。
先尝试每次元素新增后,把之前绑定的事件全部撤掉再次绑定,记得如果是用 jQuery,需要重新选择元素。 高级一点的就是只给新增加的元素绑定,或者使用事件委托。 |
4
hasbug 2017-09-25 09:05:25 +08:00
事件委托
|
5
Sapp 2017-09-25 12:23:24 +08:00
事件代理,你这个绑定方式只是绑定了当前的,新增的当然不会有。
|
6
8355 2017-09-25 14:05:59 +08:00
简单点解释就是你每次做过对购物车内商品修改后再运行一下计算的代码就好了.
|
8
swordne 2017-09-25 16:22:13 +08:00
jquery 的动态事件绑定
$(document).on('click', 'selector', funtion(){ //do.....}) 这样 JS 追加的内容也可以绑定上事件。 |
9
ahkxhyl OP @swordne
function gelegate(action, selector, callback) { var event = event || window.event; if (document.addEventListener) { document.addEventListener(action, function (event) { if (selector === event.target.tagName.toLowerCase() || selector === event.target.className || selector === event.target.id) { callback(); } }, false); } else if (document.attachEvent) { document.attachEvent('on' + action, function (event) { if (selector === event.srcElement.tagName.toLowerCase() || selector === event.srcElement.className || selector === event.srcElement.id) { callback(); } }); } else { selector['on' + action] = callback(); } } gelegate('click', 'li', function () { var $inputVal = $(this).prev('input'), $count = parseInt($inputVal.val()) + 1, $obj = $(this).parents('.amount_box').find('.reduce'), $priceTotalObj = $(this).parents('.order_lists').find('.sum_price'), $price = $(this).parents('.order_lists').find('.price').html(), //单价 $priceTotal = $count * parseInt($price.substring(1)); $inputVal.val($count); $priceTotalObj.html('¥' + $priceTotal); if ($inputVal.val() > 1 && $obj.hasClass('reSty')) { $obj.removeClass('reSty'); } //totalMoney(); }); 我这样写的 但是貌似没触发 <li class="list_amount"> <div class="amount_box margin-top-bar"> <a href="javascript:;" class="reduce reSty">-</a> <input type="text" value="1" class="sum"> <a href="javascript:;" class="plus">+</a> </div> </li> |