为什么jQuery'it’当它着火的时候;s添加到元素中
Why does jQuery's one fire immediately when it's added to an element?
这里有一个小提琴来说明这个问题。我正在添加一个jQuery-one绑定,只需单击一个元素到"html"元素即可。我不希望"one"事件处理程序在下一次单击之前激发,但它在添加绑定的单击时激发。如果它是一个添加了"one"事件处理程序的更具体的元素,这似乎不是问题,但当我使用"html"或"body"作为元素时,就会发生这种情况,这正是我想要做的
这对我来说没有意义,我认为第一次点击会为下一次点击添加一个,而且点击链接时不会触发。
顺便说一句,我的实际问题可能会以更好的方式解决,但我遇到了这个问题,很好奇为什么它没有像我预期的那样起作用。
代码:
html:
<div id='hello'>hello</div>
<a class="title" href="#">this example</a> is a test
js:
$(function() {
$('a.title').click(function() {
var htmlClickBind = function (e) {
console.log('clicked on html, e.target = ' + e.target);
console.log(e.target == '');
if (!$(e.target).is('a') ) {
console.log('cleared click event');
}
else {
$('html').one('click', htmlClickBind);
}
};
$('html').one('click', htmlClickBind);
});
});
a.target
元素上的click
事件冒泡到html
元素,您(刚刚添加的)处理程序会在那里看到它。
要防止这种情况,请在a.target
click
处理程序中使用event.stopPropgation
(或执行stopPropagation
和preventDefault
的return false
)。
更新代码(见评论):实时复制
$(function() {
// Accept the event arg ----v
$('a.title').click(function(e) {
// Stop propagation
e.stopPropagation();
var htmlClickBind = function (e) {
console.log('clicked on html, e.target = ' + e.target);
console.log(e.target == '');
if (!$(e.target).is('a') ) {
console.log('cleared click event');
}
else {
$('html').one('click', htmlClickBind);
}
};
$('html').one('click', htmlClickBind);
});
});
相关文章:
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 如何使用jquery遍历具有动态添加元素的数组
- jQuery appendTo 替换元素而不是添加元素,如果正在添加的元素预先存在于列表中
- 如何使用jquery添加元素
- 动态添加元素上的 HammerJS
- CSS没有'使用javascript向页面动态添加元素时无法工作
- 使用Javascript在DOM元素中添加元素
- 在添加元素时激发JS事件
- 什么's是在IE8+中添加元素的最有效方法
- d3.js在添加元素时协调
- 使用路由器链接动态添加元素
- 动态添加元素
- 在页面内容完全加载后,使用jQuery在DOM中添加元素
- j查询绑定单击不添加元素
- 在循环 jQuery 上添加元素
- 从一个页面调用 javascript 函数以在第二个页面上添加元素
- 页面加载后向<正文>添加元素时出现问题
- 动态添加元素时刷新 HTML
- 动态添加元素时不触发 JQuery 事件
- 如何使用 JavaScript 获取动态添加元素的宽度