event对象兼容火狐、谷歌、ie浏览器问题

阅读: 评论:0

event对象兼容⽕狐、⾕歌、ie浏览器问题
项⽬中遇到这样⼀个业务需求:给动态⽣成的页⾯元素(input、div、checkbox等)添加事件,业务实现的难点在于:动态⽣成的页⾯元素的id、name都是按⼀定规则赋值的(例如:input1、input2..),那么给这些元素添加事件需要获取到动态⽣成元素的id或name属性值,根据属性值取到元素对象然后添加事件。
街景地图2021年高清最新版经过以上分析不难看出:难点就在于取得动态⽣成元素的id、name属性值,给元素添加事件应该很容易办到,这时js中⼀个重要的对象event 该隆重出场了。
事件发⽣的过程中 event对象才⽣效,event对象有很对属性:例如触发event对象的元素、⿏标的位置及状态、按下的键等等。event的某些属性只对特定的事件有意义。⽐如,fromElement 和 toElement 属性只对 onmouseover 和 onmouseout 事件有意义。具体event 的对象的众多属性在此就不做详细的介绍,⽹上关于event属性介绍的帖⼦很多。
获取当前触发事件的页⾯元素 使⽤event的target和srcElement 属性,srcElement 在ie中使⽤,target在firefox中使⽤,chrome 浏览器同时具有这两个属性,但据我个⼈测试,target属性在ie10中也可以使⽤了(ie其他版本没有测试),这样如果我要获取触发事件的元素的属性值就可以搞定了:
var name_val = event.target.name;
var id_val = event.target.id;
但是问题出现了:在⽕狐浏览器中不能直接⽤event对象,浏览器⽆法根据当前触发的事件获取event对象。解决⽅法有这么⼏种:
(1)调⽤事件⽅法时添加参数event(参数名称必须为event,其他名称不可以),例如: function aa(event){........} ,元素:<input type="text" οnclick="aa(event)"></input>
(2)使⽤函数  arguments.callee.caller.arguments[0] 获取event对象,使⽤这种⽅法不需要在函数中声明event参数,可以直接使⽤,⽽且在⽕狐浏览器中有效
(3)为⽕狐浏览器声明可以直接调⽤的event对象:
1. /*
2. 判断浏览器名称和版本
3. ⽬前只能判断:ie/firefox/chrome/opera/safari
4. 2012年5⽉16⽇23:47:08
云阳县
5. 浏览器内核名称:NV.name;
6. 浏览器内核版本:NV.version;
7. 浏览器外壳名称:NV.shell;
大理丽江自由行旅游攻略
8. */
9. var NV ={};
10. var UA = LowerCase();
11. try{NV.name=!-[1,]?'ie':(UA.indexOf("firefox")>0)?'firefox':
(UA.indexOf("chrome")>0)?'chrome':window.opera?'opera':window.openDatabase?'safari':'unkonw';}catch(e){};
12. try{NV.version=(NV.name=='ie')?UA.match(/msie ([\d.]+)/)[1]:(NV.name=='firefox')?UA.match(/firefox\/([\d.]+)/)
[1]:(NV.name=='chrome')?UA.match(/chrome\/([\d.]+)/)[1]:(NV.name=='opera')?UA.match(/opera.([\d.]
+)/)[1]:
(NV.name=='safari')?UA.match(/version\/([\d.]+)/)[1]:'0';}catch(e){};
13. try{NV.shell=(UA.indexOf('360ee')>-1)?'360极速浏览器':(UA.indexOf('360se')>-1)?'360安全浏览器':新疆旅游专列
(UA.indexOf('se')>-1)?'搜狗浏览器':(UA.indexOf('aoyou')>-1)?'遨游浏览器':(UA.indexOf('theworld')>-1)?'世界之窗浏览器': (UA.indexOf('worldchrome')>-1)?'世界之窗极速浏览器':(UA.indexOf('greenbrowser')>-1)?'绿⾊浏览器':
(UA.indexOf('qqbrowser')>-1)?'QQ浏览器':(UA.indexOf('baidu')>-1)?'百度浏览器':(UA.indexOf('360se')>-1)?'':'未知或⽆壳';}catch(e){}
14. /*
15. 给⽕狐添加event属性。
16. */
17. if(NV.name=='firefox')
18. {
大理到丽江怎么走最方便19. var $E =function(){var c=$E.caller;while(c.caller)c=c.caller;return c.arguments[0]};
20. __defineGetter__("event", $E);
21. }
22.
23. (引⽤:qianduanblog/874.html)
具体项⽬中的应⽤代码是这样的:
for ( var m = 1; m <= 5; m++) {
$("#startTime" + m).blur(
function() {
var e = arguments.callee.caller.arguments[0] || window.event;
var idVal = e.target.id;
var startTime_ = $("#" + idVal).val();
var timePart = $('#dutyPart').val();
if (startTime_ != null && startTime_ != ""
苏州乐园门票包含什么
&& startTime_ != undefined && timePart != 0) {
autoInitStartAndOffTime(idVal, startTime_, timePart);
}
});
$("#endTime" + m).blur(
function() {
var e = arguments.callee.caller.arguments[0] || window.event;
var idVal = e.target.id;
var endTime_ = $("#" + idVal).val();
var timePart = $('#dutyPart').val();
if (endTime_ != null && endTime_ != ""
&& endTime_ != undefined && timePart != 0) {
autoInitStartAndOffTime(idVal, endTime_, timePart);
}
});
}
这样就实现了event 浏览器的兼容问题。

本文发布于:2023-09-14 00:08:30,感谢您对本站的认可!

本文链接:http://www.035400.com/whly/4/228645.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:事件   浏览器   元素   对象   属性   添加   获取   名称
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2024-2030 Comsenz Inc.Powered by © 文化旅游网 滇ICP备2022007236号-403 联系QQ:1103060800网站地图