XiaoHui.net 笑汇程序员论坛首页
工作并快乐着,职业并休闲着
寻梦的岁月从不言辛苦几许,
不问收获几多……
» 游客:  申请新用户 | 登录 | 会员 | 统计 | 帮助 » XiaoHui.Net 笑汇程序员论坛 | 纯文字版 | 全站索引 | XiaoHui.com


[原创心得] Javascript中对于Popup捕获事件的处理

RSS 订阅当前论坛  

上一主题 下一主题
     

标题: [原创心得] Javascript中对于Popup捕获事件的处理  
 
ctrl12
版主
Rank: 7Rank: 7Rank: 7



UID 478
精华 0
积分 1033
帖子 1033
阅读权限 100
注册 2002-9-28
状态 离线
Javascript中对于Popup捕获事件的处理

我们在处理HTML元素的事件时,通常可以使用两种方法来添加其处理函数。一是直接向HTML元素的事件处理回调(如:onclick、onlond等)赋值;一是使用元素的attachEvent()方法来添加处理函数。这两种方法对于普通的页面表现出来的效果是完全相同的,而对于popup它们却有很大的差别。

    先看下面的popup中事件处理示例,再来说是什么问题: <script language="javascript">
function NormalEventListener(elmt)
{
    alert(event);
}
function AttachEventListener(evt)
{
    alert(evt);
}
var popwin = window.createPopup();
var popdoc = popwin.document;
var div = popdoc.createElement('DIV');
div.style.width = '100%';
div.style.height = '100%';
div.style.border = 'dotted 1px blue';
div.innerText = 'click me.';
div.onclick = function Click()
{
    NormalEventListener(this);
};
div.attachEvent('onclick', AttachEventListener);
popwin.document.body.appendChild(div);
popwin.show(100, 100, 200, 200);
</script>
    这个示例中,分别使用了两种方法来添加事件处理函数。对于attachEvent这种方式,就是被attach的处理函数的第一个参数即是默认的event变量。

    今天我无意中使用了另一种方法,向事件处理回调赋值的方法附加事件处理函数,div.onclick = function()。却发现了一个popup窗口中响应时间处理函数的缺陷。执行上面的代码,我们会发现NormalEventListener()方法的elmt参数是引发事件的元素本身的引用,而此时调用event属性,却发现event这厮居然是:null。这可咋怎呐?!

    原来NoramlEventListener()中的event是window.event,因为这个函数定义在IE的window的作用域内,它的引用也可以写成window.NormalEventListener(),而我们触发的事件是在popup窗口中的window中。就是说IE的window和popwin.document.parentWindow是两个不同的域,当然这个时候window.event就是null了。解决这个问题的办法有两个,一可以去取popwin.document.parentWindow的event,不过这个方法比较麻烦,需要专门去记录那个popwin变量。另外还有一个最简单的方法可以取到正确的event属性。因为每个事件触发的源元素(srcElement)和触发它的事件属性总是在同一个域中,所以我们就可以使用如下办法将其取到:  function NormalEventListener(elmt)
{
    var evt = elmt.document.parentWindow.event;
    alert(evt);
}
    这个elmt参数是从Click函数中传递过来的触发事件的元素本身,即:event.srcElement。
2006-5-18 21:42#1
查看资料  Blog  发短消息  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题  


 


所有时间为 GMT+8, 现在时间是 2008-12-3 07:56 Powered by Discuz! 4.1.0 清除 Cookies - XiaoHui.Net 笑汇程序员论坛 - Archiver