Firefox не регистрирует обработчик события onclick

Ниже приведены два фрагмента кода для назначения обработчика события для события onclick. Первая версия работает в IE, FF, Safari и Chrome. Вторая версия работает в IE, Safari и Chrome, но не в FF. В первой версии я регистрирую обработчик событий в разметке. Во второй версии я использую более новый и предположительно более надежный метод регистрации обработчика событий.

Используя 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>
************************************************************

person mbmxyz    schedule 14.10.2010    source источник
comment
На самом деле ваша вторая версия такая же, как и первая. Он не новее и не надежнее, вы просто устанавливаете слушателя через JavaScript, а не в разметке. Новым способом было бы использование addEventListener. Полезная информация: quirksmode.org/js/events_advanced.html   -  person Felix Kling    schedule 14.10.2010


Ответы (4)


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

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

person sje397    schedule 14.10.2010
comment
+1 Вау, я не знал, что это делает какой-либо браузер ... но я полагаю, что пытался не писать JS в старые недобрые времена IE‹ = 6, откуда, без сомнения, возникла большая часть этого безумия. - person tobyodavies; 14.10.2010

в последнем блоке скрипта playerFive никогда нигде не определяется, вы, вероятно, хотите

document.getElementById('playerFive').onclick=handler;
person tobyodavies    schedule 14.10.2010

Вы можете попробовать этот код

 if(document.all)// For IE
 {   
       document.getElementById('playerFive').attachEvent('onclick',handler);
 }
 else // For FF
 {
       document.getElementById('playerFive').addEventListener('click',handler,false);
 }
person ismailperim    schedule 14.10.2010

<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.

person Ramiz Uddin    schedule 14.10.2010