javaScript问题?求高手解释。

javaScript问题?求高手解释。,第1张

IE6下模拟addEventListener,

正常如果你不兼容IE6直接用addEventListener就好了。

====

因为windowonload=func1()会注册一个onload时执行的函数,但是如果后面再写一次windowonload=func2()则刚才的func1被覆盖。

所以为了让windowonload能执行多个函数,就用addLoadEvent,把想要注册的函数逐个放进去

===

在第一次注册时,typeof windowonload应该是undefined,即还没有函数注册在这个onload事件

,这时就执行windowonload=func;

在后来要注册函数时,就不能写在windowonload上了,应该写在一个新函数里

windowonload=function(){

oldonload();//之前保存的windowonload,即func1

func();//本次的func

}

===

这么说应该明白了吧

在html页面中某段js中调用了windowonload = function test1(){},同时在页面上又有<body onlocad="test2();">语句,

这将会导致windowonload事件覆盖body onload事件,导致body onload事件无效

解决方法:

第一:attachEven给onload添加所需运行的函数

if(documentall){

  windowattachEvent('onload',FuncName)

}else{

  windowaddEventListener('load',FuncName,false);

}

第二:把两个初始化函数再组成一个新的函数

function init(){}

function myfun(){}

function myinit(){

  init(); 展开在html页面中某段js中调用了windowonload = function test1(){},同时在页面上又有<body onlocad="test2();">语句,

这将会导致windowonload事件覆盖body onload事件,导致body onload事件无效

解决方法:

第一:attachEven给onload添加所需运行的函数

if(documentall){

  windowattachEvent('onload',FuncName)

}else{

  windowaddEventListener('load',FuncName,false);

}

第二:把两个初始化函数再组成一个新的函数

function init(){}

function myfun(){}

function myinit(){

  init();

  myfun();

}

windowonload=myinit;

第三:对两个函数进行判断加载方式

function addLoadEvent(func){

  var oldonload=windowonload;

  if(typeofwindowonload!='function'){

    windowonload=func;

  }else{

    windowonload=function()

一 多个windowonload冲突

在一个页面中有两个JavaScript 分别都用到了windowonload

一个是:windowοnlοad=externallinks,另一个是:windowοnlοad=beijing2008

这样就造成了一个JavaScript 运行不了。

写成这样就可以了windowοnlοad=function(){externallinks();beijing2008();}

还有一种方法,举个例子

<script type="text/javascript">

function $(obj){return documentgetElementById(obj);}

windowοnlοad=function(){

onload2();

onload3();

}

function onload2(){

$("aa")οnclick=function dd(){alert("haha")};

}

function onload3(){

alert("加载完成");

}</script>

第三种方法:

用windowattachEvent和 windowaddEventListener来解决问题了。

当某一事件被触发时需要执行某个函数,在IE下可用attachEvent,在FF下则要用addEventListener。

attachEvent()有两个参数,第一个是事件名称,第二个是需执行的函数;

addEventListener()有三个参数,第一个是事件名称,但与IE事件不同的是,事件不带"on",比如"onsubmit"在这里应为"submit",第二个是需执行的函数,第三个参数为布尔值;

例如:(可以在IE和FF下分别测试):

<input type="button" id="ie" value=" IE " />

<input type="button" id="ff" value=" FF " />

<script type="text/javascript">

var isIE = (documentall && windowActiveXObject && !windowopera) true : false;

if(isIE)

{

documentgetElementById(’ie’)attachEvent("onclick", Fun);

}

else

{

documentgetElementById(’ff’)addEventListener("click", Fun, false);

}

function Fun()

{

if(isIE)

{

alert(’I\’m IE’);

}

else

{

alert(’I\’m Not IE’);

}

}

</script>

所以我们可以直接这样编写:

if (documentall){

windowattachEvent("onload",调用函数名)//对于IE

}

else{

windowaddEventListener("load",调用函数名,false);//对于FireFox

}

二 windowonload 与body onload冲突

onload事件是window对象才有的,<body οnlοad="func">这样设置只是为了方便,其实仍然是windowοnlοad=func,且windowonload只允许指定一次,冲突是必然的;如果要指定多个,同上的方法

转载于:https://wwwcnblogscom/liwenjuan/p/3454435html

相关资源:函数绑定到onload事件处理函数上的方法_js的onload多个函数

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/12186226.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存