观察具有单独点击-观察功能的元素中元素的点击
Observing click of element within element that has a separate click observe function
我在另一个元素中有一个元素,两者都有单独的点击功能。如果子元素具有单击功能,我想忽略或停止父元素。例如:
<div class="parent">
<div class="child1">Child Click Function</div>
Parent Click Function
</div>
<script type="text/javascript">
document.observe('dom:loaded',function(){
if ($$('.parent') != undefined) {
$$('.parent').invoke('observe','click', function(e) {
alert('parent');
});
}
if ($$('.child1') != undefined) {
$$('.child1').invoke('observe','click', function(e) {
alert('child');
});
}
});
</script>
发生的情况是,当单击child1时,由于child1在parent中,所以该项和parent都会被触发。我想在选择子对象时禁用/停止观察,但当您单击父对象内的任何其他对象时,它会正常工作。
谢谢。
您遇到了所谓的"事件冒泡"。给定元素上的事件在DOM中冒泡,直到它们到达根节点,除非显式停止冒泡。由于看起来像是在使用Prototype,因此将孩子的事件处理程序更新为以下内容就可以了:
$$('.child1').invoke('observe','click', function(e) {
Event.stop(e);
alert('child');
});
http://api.prototypejs.org/dom/Event/prototype/stop/
我不确定哪一个有效,但我通常同时使用:
if (event.cancelBubble)
event.cancelBubble();
if (event.stopImmediatePropagation)
event.stopImmediatePropagation();
并将click事件传递到onclick函数中。
停止传播和取消气泡都将一起停止事件的传播,从我得到的是,你想绕过与父级相关联的事件。我建议在父对象上使用.unbind(),以防单击子对象。例如,
(CHECK CHILD CLICK) {
$('.parent').unbind('click');}
相关文章:
- 如何使用javascript设置元素旋转和动态观察的动画
- 使用挖空.js如何刷新 Select 元素中的可观察数组
- 观察任何元素何时更改
- 突变观察者未能检测到元素's删除dom
- 敲除可观察数组并没有更新从数组中移除元素的视图
- 手动调整元素大小;不要在Chrome中激发突变观察者
- 初始化可从元素属性值观察到的Knockout
- 原型JavaScript Event.observe-如何观察可能存在或不存在的元素
- 根据某些条件将 JS 绑定到可观察对象内的数组元素
- 如何观察聚合物元素属性值从索引.html的变化
- 正在更新挖空.js可观察数组元素值
- KNOCKOUTJS 将多个输入元素绑定到一个可观察量
- 如何使已导入 ajax 的元素可观察
- 使用突变观察者将 DOM 元素列入黑名单
- 在 html 中的文本字段和
元素之间观察到额外的间距
- 敲除获取绑定到 DOM 元素的可观察量
- 通过动态插入的 DOM 元素进行 AJAX 调用,我是否必须使用突变观察器
- 观察元素位置并对 AngularJS 中的更改做出反应
- Knockout.js:将元素添加到可观察数组
- 聚合物自定义元素观察者开火太早