JavaScript的事件确实会带着这个属性。当程序捕获一个事件的时候,它会知道这个事件来自于页面上哪个元素。修改上面的程序,使用事件委托来处理点击事件。当最顶层捕获点击事件时,查看事件来源于哪一层,然后只将那一层涂色。再次点击每一层,查看实际效果。只有当前点击的正方形变色了,其他的都毫无反应。(点击这里查看demo)
HTML
<div id="d1" class="white">
<div id="d2" class="white">
<div id="d3" class="white">
<div id="d4" class="white"></div>
</div>
</div>
</div>
<button id="reset1">重置</button>
jQuery('#d1').click(function(e){
var t = jQuery(e.target);
var id = t.attr('id');
if (id==='d4'){
t.css('background-color', 'yellow');
} else if (id==='d3') {
t.css('background-color', 'green');
} else if (id==='d2') {
t.css('background-color', 'blue');
} else {
t.css('background-color', 'red');
}
});
当然,如果你有这样嵌套的页面元素,使用了事件委托,委托到了最顶层,这时需要注意:如果其中某个元素,你不希望它的事件冒泡,那么可以使用某种方式阻止事件的冒泡。在jQuery框架中,可以使用stopPropagation()方法来实现而不必关心浏览器兼容性。