附加到 dom 元素的 jQuery 单击事件处理程序
jQuery click event handler attached to dom element
我在使用 jquery 构建电子商务购物车模块时遇到了困难。假设我在 html 中编写这样的标签:
<div class="add-to-cart">+</div>
然后在我的应用中定位它:
this.$products,
this.$pa,
this.$ip,
this.$products = $('.shopperProducts'),
this.$pa = this.$products.find('.shopperAdd');
var self = this;
this.$ip = function() {
var init = function(action, product) {
/.../
};
self.$pa.on('click', function(event) {
event.preventDefault();
init('add', this);
});
};
在im显示产品时可以使用此方法,因为它们在页面刷新时由php显示,因此我拥有php在html上生成的所有+
链接。
问题出在结帐文件上,这是我显示装满产品的整个购物车时的页面,购物车必须在jQuery和AJAX中生成和处理。
我向您展示的代码在购物车页面中不起作用,因为这些链接通过 jQuery 附加到 DOM 中。
我一直在研究可能的方法,很少,最赞成的是这样做:
$(document).on('click', self.$pa, function(event) {
该解决方案的问题在于,由于资源消耗高,它也被认为是要避免的做法,我自己可以看到执行时间的差异,在低端设备上需要更长的时间。在这种情况下,是否有一些巧妙的技巧或被认为是良好做法的方法?
<---编辑(解决方案)--->
而不是打电话:
this.$products = $('.shopperProducts'),
this.$pa = this.$products.find('.shopperAdd');
一开始,我必须在将元素加载到 DOM 中然后它们变得可定位后调用它,然后我只需要使用 self.$ip();
并且可以附加事件处理程序。在不使用任何类型的解决方法的情况下,解决方案只是更改执行命令的顺序。
主要策略可用于为动态添加到 dom 的元素添加单击处理程序。
一,每次创建 DOM 元素时,都可以向 DOM 元素添加点击处理程序
var addToCartButton = $('<div class="add-to-cart">+</div>');
addToCartButton.on('click', function(){
init('add', this);
};
// then you add your DOM element to the page
$('.container').append(addToCartButton);
第二,您可以让页面上的母版单击事件侦听器侦听按钮落下的所有单击,并在单击处理程序中确定用户是否正在单击您的元素。这最终会更有效,并且您不必在每次向页面添加元素时添加或删除事件处理程序。这种模式称为事件委托,这是 Stack 上的另一篇文章,它可能比我更好地解释了它
。什么是 DOM 事件委派?
$('.container').click(function(event){
if ($(event.target).is('.add-to-cart') || $(event.target).parents().is('.add-to-cart')) {
// handle add to cart
}
})
顺便说一句,您对 self
变量的使用实际上并没有做任何事情,声明 this.$pa
也没有。您基本上是在访问this
对象的属性"$pa",但不执行任何操作。
- jquery单击隐藏的复选框
- jQuery单击隐藏其父元素
- 水平滚动不适用于jquery单击
- jQuery单击事件在一次之后不会触发
- Jquery单击按钮上没有类或id的事件
- 将JQuery单击事件直接指向同一元素的两个
- 如何通过使用jQuery单击该DIV来获取children DIV类名
- 使用 jQuery 单击链接时更改链接背景颜色
- JQuery:单击范围标签时切换日期选择器
- 如何使用jQuery单击其缩略图时显示主图像
- JQuery单击“选择子图像”
- 使用jQuery单击锚后,更改锚的文本
- jQuery单击并显示元素列表
- JQuery:单击具有特定URL的嵌套Img
- Jquery单击“选中最近的复选框”
- Jquery单击按钮时不显示警告框
- 突出显示iframe内的文本,同时使用jquery单击文档上的相同文本
- 无法识别JQuery单击事件
- jquery单击链接并获取单选输入值以更改span中的文本
- 使用jquery单击事件淡入隐藏文本