最新评论
司域 2009-12-17 20:18
[quote]Ronie Deng:在要用js开发某些小功能的时候,最大的障碍往往不是想法,而是那些难以逾越的兼容性问题。[/quote]
深有同感,这个年头想用js+css写个应用是不容易..
Ronie Deng 2008-06-20 22:43
@Alex.XL
终于想明白如何使用你说的绝招了,代码改成下面这样的:
$('popDiv').onclick=function(event){
event = event || window.event;
event.cancelBubble=true;
};
document.onclick = function() {
$('popDiv').style.display = 'none';
};
这简直就是从命题直接翻译过来的,非常直接。当点击到div时,将点击事件取消,就不会继续引发父级元素的click事件了,相当于点击无效一样。这种办法才是最有效的。
谢了!
终于想明白如何使用你说的绝招了,代码改成下面这样的:
$('popDiv').onclick=function(event){
event = event || window.event;
event.cancelBubble=true;
};
document.onclick = function() {
$('popDiv').style.display = 'none';
};
这简直就是从命题直接翻译过来的,非常直接。当点击到div时,将点击事件取消,就不会继续引发父级元素的click事件了,相当于点击无效一样。这种办法才是最有效的。
谢了!
狼Robot 2008-06-20 15:37
document.onclick = function(e)
{
var o = $("popDiv");
var el = (e ? e.target : event.srcElement);
var flag = false;
do
{
if(o == el)
{
flag = true;
break;
}
}while(el=el.parentNode)
if(!flag)
{
o.style.display = "none";
}
}
改了一下,就这样吧。
{
var o = $("popDiv");
var el = (e ? e.target : event.srcElement);
var flag = false;
do
{
if(o == el)
{
flag = true;
break;
}
}while(el=el.parentNode)
if(!flag)
{
o.style.display = "none";
}
}
改了一下,就这样吧。
Ronie Deng 2008-06-20 12:00
@vento
恩,我试着理解你的思路,不过首先定义click事件的应该是document,而不是popDiv,而且你的思路忽略了一些浏览器兼容性问题。另外,还需要对event的target是否具有id等做一些判断。
最后,我针对你的做了一些兼容性改动,代码如下:
document.onclick=function(event){
event = event || window.event;
var target = event.srcElement || event.target; //取得点击的div
if (target.id != 'popDiv') $('popDiv').style.display = 'none';
};
不过我认为对很多元素的id去进行判断,还是不如对一个状态值判断来得简单,你说呢?
恩,我试着理解你的思路,不过首先定义click事件的应该是document,而不是popDiv,而且你的思路忽略了一些浏览器兼容性问题。另外,还需要对event的target是否具有id等做一些判断。
最后,我针对你的做了一些兼容性改动,代码如下:
document.onclick=function(event){
event = event || window.event;
var target = event.srcElement || event.target; //取得点击的div
if (target.id != 'popDiv') $('popDiv').style.display = 'none';
};
不过我认为对很多元素的id去进行判断,还是不如对一个状态值判断来得简单,你说呢?
狼Robot 2008-06-20 11:50
document.onclick = function(e)
{
var o = $("popDiv");
var el = (e ? e.target : event.srcElement);
do
{
if(o == el)
{
o.style.display = "none";
break;
}
}while(el=el.parentNode)
}
不知道这样行不行.
晕,我似乎搞反了。
{
var o = $("popDiv");
var el = (e ? e.target : event.srcElement);
do
{
if(o == el)
{
o.style.display = "none";
break;
}
}while(el=el.parentNode)
}
不知道这样行不行.
晕,我似乎搞反了。
vento 2008-06-20 10:53
@Ronie Deng
$('popDiv').onclick=function(){
var target = window.event.srcElement; //取得点击的div
// 下面可通过id判断target和popDiv是否相同,相同隐藏
};
不过缺点如 Kidwind1 说的,当div内有其他元素时就隔屁了,需要通过循环判断夫元素是否是popDiv,这样的话你的反而更简单了
$('popDiv').onclick=function(){
var target = window.event.srcElement; //取得点击的div
// 下面可通过id判断target和popDiv是否相同,相同隐藏
};
不过缺点如 Kidwind1 说的,当div内有其他元素时就隔屁了,需要通过循环判断夫元素是否是popDiv,这样的话你的反而更简单了
Ronie Deng 2008-06-20 09:44
@vento && Alex.XL
能否提供对应的简单demo呢,和5楼一样,对于你们的具体思路,还是不太清楚,希望能讲得更透彻一些。
@八二愚人
这里只是想要用简单的模型来讨论方案的实现,所以很多额外的东西都没有考虑在内了。
能否提供对应的简单demo呢,和5楼一样,对于你们的具体思路,还是不太清楚,希望能讲得更透彻一些。
@八二愚人
这里只是想要用简单的模型来讨论方案的实现,所以很多额外的东西都没有考虑在内了。
Kidwind1 2008-06-20 09:25
--引用--------------------------------------------------
vento: 利用onclick事件的srcElement属性会不会更简单?
--------------------------------------------------------
如果点击的是Div内的元素的话,srcElement属性指的是元素内的对象而非Div元素,因此通过判断是否点击在Div内还需取得点击元素的上及元素依次进行判断。
--引用--------------------------------------------------
Alex.XL: 有个event.cancelBubble=true;可以阻止事件往父控件继续触发。。
可以试试这个。
--------------------------------------------------------
是可以阻止事件冒泡,但如何判断是否要隐藏Div时仍然没有思路。能否具体讲讲。
个人认为楼主的方式还是可以借鉴的。
vento: 利用onclick事件的srcElement属性会不会更简单?
--------------------------------------------------------
如果点击的是Div内的元素的话,srcElement属性指的是元素内的对象而非Div元素,因此通过判断是否点击在Div内还需取得点击元素的上及元素依次进行判断。
--引用--------------------------------------------------
Alex.XL: 有个event.cancelBubble=true;可以阻止事件往父控件继续触发。。
可以试试这个。
--------------------------------------------------------
是可以阻止事件冒泡,但如何判断是否要隐藏Div时仍然没有思路。能否具体讲讲。
个人认为楼主的方式还是可以借鉴的。
Q.Lee.lulu 2008-06-20 08:38
LS正解!!楼主可以看看JS的冒泡事件....
PS:从来没想过要计算什么DIV坐标.一看到命题想的就是点击DIV和非DIV
PS:从来没想过要计算什么DIV坐标.一看到命题想的就是点击DIV和非DIV


