2010-10-14 71 views
0

下面是一个onclick事件分配一个事件处理程序的代码的两个剪。版本一在IE,FF,Safari和Chrome中运行。第二版可在IE,Safari和Chrome中使用,但不适用于FF。在版本1中,我在标记中注册事件处理程序。在版本2中,我使用了一个更新的,并且更可靠的方法来注册事件处理程序。火狐不注册onclick事件处理程序

用Firebug,它看起来就像是没有得到注册onclick事件处理程序,但我不明白为什么不能。任何想法赞赏。谢谢。

 
*************** Version One ****************************** 
< script type="text/javascript"> 

function handler() 
{ 
    // do something here 
} 

</script> 

< a id="playerFive" class="player" onclick="handler()"> 
    < img src="./images/speakerIcon25pxFFF4E0.png" alt=""/> 
</a> 
************************************************************ 


*************** Version Two ****************************** 
< script type="text/javascript"> 

function handler() 
{ 
    // do something here 
} 

</script> 

< a id="playerFive" class="player"> 
    < img src="./images/speakerIcon25pxFFF4E0.png" alt=""/> 
</a> 

< script type="text/javascript"> 

playerFive.onclick = handler; 

< /script> 
************************************************************ 
+0

其实你的第二个版本是一样的第一个。它不是“新的”或“更稳健”,您只需通过JavaScript设置监听器,而不是标记。新的方法是使用'addEventListener'。实用信息:http://www.quirksmode.org/js/events_advanced.html – 2010-10-14 06:34:37

回答

1

FF不允许您访问DOM元素作为由其ID标识的JavaScript变量。

您需要使用getElementById代替。

在最后一个脚本块
+0

+1哇,我不知道任何浏览器都没有...但我想我尽量不写JS中的坏日子IE <= 6,其中许多疯狂无疑起源于此 – tobyodavies 2010-10-14 06:26:03

0

playerFive是从来没有在任何地方定义,你可能想

document.getElementById('playerFive').onclick=handler; 
0

你可以试试这个代码

if(document.all)// For IE 
{ 
     document.getElementById('playerFive').attachEvent('onclick',handler); 
} 
else // For FF 
{ 
     document.getElementById('playerFive').addEventListener('click',handler,false); 
} 
0
<html> 
<head> 
    <script type="text/javascript"> 
    window.onload = function() { 
     var div = document.getElementById("dvClickMe"); 
     if(div.attachEvent) 
      div.attachEvent('onclick', sayHello); 
     else 
      div.setAttribute('onclick', 'sayHello()'); 
    } 
    function sayHello() { alert("Hello!"); } 
    </script> 
</head> 
<body> 
    <div id="dvClickMe">Click me!</div> 
</body> 
</html> 

上面的代码正在IE8和FF 3.6.10

相关问题