点击检测文档's添加的元素
Click detection on document's added element
我目前正在我的页面脚本中使用它的一个元素添加并单击不同的元素,如文本、div和图像。
一开始,使用jQuery-hide方法隐藏所有内容,并且只显示一个输入。如果一切都是正确的,那么剩下的就显示出来了——现在你可以添加新的元素了。在我的html文档中,我使用的方法如下:
$(document).ready(function() {
hideUnused();
$('#file_upload').uploadify({
//all stuff from uploadify <- not important now
})
document.onclick = function (evt) {
ClickDocument(evt); //<- important now
};})
它一开始对页面上的所有内容都很有效,但当我添加新元素(简单地附加子方法)时,看起来它们不在ClickDocument方法看到的DOM树中。
它是ClickDocument方法:
function ClickDocument(e){
e = e || event;
var target = e.target || e.srcElement;
alert(target.nodeName);
return;
}
只测试它非常简单。有人知道我能用它做什么吗?
哦,我忘了提到一件事——我一直在测试现场活动http://api.jquery.com/live/但这不符合我的期望。它不适用于显示/隐藏方法。
非常感谢您的关注和帮助。
编辑:
有人建议我用两种不同的方式使用.delegate()
方法。两者都将原来的html代码从$(document).ready(function()
进入$("body").delegate(".kElement","click", function(evt){
作为我的类元素,我希望在单击时有额外的操作是kElement。所以第一个看起来是这样的:
$("body").delegate(".kElement","click", function(evt){
e = evt || event;
var target = e.target || e.srcElement;
alert(target.nodeName);
})
第二个看起来是这样的:
$("body").delegate(".kElement","click", function(evt){
ClickDocument(evt);
})
因此,当我点击我的对象时,它应该显示警报,但它没有。我做错了什么?
如果以后要向页面添加元素,并且需要事件才能工作,则需要使用事件委派。简而言之,这意味着将一个事件附加到元素集合的父级,然后检查是否有任何子级被单击。
例如
<div class="parent">
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
</div>
我可以使用jQuery中的.on()方法将事件附加到所有子元素
$('.parent').on('click', '.child', function(event){
// Do something here
})
.on()和.of()方法是处理jQuery中事件的较新且首选的方法(因为您也可以分配正常事件),但如果您使用的是旧版本的jQuery,则需要delegate()方法。
避免使用.live(),因为它的性能不如.delete(),并且存在链接问题(以及被弃用)。
在附加/绑定点击事件时,请使用.live()
而不是.bind()
.live()
将确保该事件也适用于未来的所有元素。
- 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 获取动态添加元素的宽度