1.点击按钮展开下拉列表
2.点击下拉列表中的选项进行选择
3.点击除下拉列表外的body,收起下拉列表
效果如图:
2.jQuery:
css样式省略略略略略略略略............
function show(){
var e= arguments.callee.caller.arguments[0] || event
if(e &&e.stopPropagation){
e.stopPropagation()
}else if(window.event){
window.event.cancelBubble = true
}
(".gray").show()
}
('html,body,.close').click(function(){
(".gray").hide()
})
因为子元素在父元素的容器内。给父层元素绑定事件,实际上已经包括了父层元素内的所有区域,所以也包括子元素,所以点击子元素会触发父元素的点击事件。
对于事件而言,这是一种事件传递。如果不希望事件传递下去,可以在子元素上使用js的阻止事件传递方法stopPropagation,就不会将事件传递到父层元素。
这个是事件冒泡!和css没啥关系,就是JS的事。
解决方案:
1.event.stopPropagation()
针对你的代码 大概是这样
obj.onmouseup=function(event){XXXXXXX
event.stopPropagation()
}
事件处理过程中,阻止了事件冒泡,但不会阻击默认行为(它就执行了超链接的跳转)
2.return false
obj.onmouseup=function(){XXXXXXX
return false
}
事件处理过程中,阻止了事件冒泡,也阻止了默认行为(比如刚才它就没有执行超链接的跳转)
3.event.preventDefault()
obj.onmouseup=function(event){XXXXXXX
event.preventDefault()
}
在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个事件会向这个对象的父级对象传播,从里到外,直至它被处理(父级对象所有同类事件都将被激活),或者它到达了对象层次的最顶层,即document对象(有些浏览器是window)。
以上部分摘自:网页链接