2010-10-14 2 views
0

Ниже приведены два кода кода для назначения обработчика события для события onclick. Версия One работает в IE, FF, Safari и Chrome. Версия 2 работает в IE, Safari и Chrome, но не в FF. В первой версии я регистрирую обработчик событий в разметке. Во второй версии я использую более новый и, предположительно, более надежный метод регистрации обработчика событий.Firefox не регистрирует обработчик события 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 –

ответ

1

FF не позволяет вам получить доступ к элементам DOM как переменные javascript, названные по их идентификатору.

Вместо этого вы должны использовать getElementById.

+0

+1 Ничего себе, я не знал, что любой браузер сделал ... но я полагаю, я пытался не писать JS в плохие старые дни IE <= 6, где большая часть этого безумия, несомненно, возникла – tobyodavies

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