Как передать / экранировать аргумент к обработчику событий, прикрепленному с помощью javascript?

В коде HTML+Script ниже,

  • обработчик событий присоединяется после загрузки страницы с помощью setAttribute(...),
  • Передатчику события передается аргумент, который также читается динамически.
  • Организатор события успешно прикреплен (подтверждено getAttribute(...)

Однако обработчик не срабатывает.

Что не так с фрагментом ниже?

<HTML>
 <BODY onload="loader();">
   <table>
        <tbody>
            <tr>
                <td id="myId">FirstColumn</td>
                <td id="otherId">SecondColumn</td>
                <td id="lastId">Balderdash</td>
            </tr>
        </tbody>
   </table>
 </BODY>
 <script language="javascript">
    function loader(){

    document.getElementById('myId').setAttribute('onmouseover','showMessage("'+document.getElementById('otherId').innerHTML+'");');
    alert(document.getElementById('myId').getAttribute('onmouseover'));

    document.getElementById('myId').setAttribute('onmouseout','alert(\"'+document.getElementById('otherId').innerHTML+'\");');
    alert(document.getElementById('myId').getAttribute('onmouseout'));
    document.getElementById('lastId').setAttribute('onmouseout','alert("hohoho");');

    alert(document.getElementById('lastId').getAttribute('onmouseout'));
    function showMessage( aMessage ){
        alert(aMessage);
    }
 </script>
</HTML>

2 ответа

Решение

Пост Тима там помог мне понять это; хотя мое понимание эмпирически.

В дополнение к прямому назначению

например

document.getElementById(...).onMouseOver = stuff;
function stuff(){//do the Deed};

вместо

document.getElementById(...).setAttribute(...);

Видимо, прикрепленный обработчик событий может не принимать никаких аргументов.

Я изменил свои подписи обработчика, чтобы принять 0 аргументов, и это работает!

Не использовать setAttribute установить обработчики событий на узлах DOM. Просто используйте свойство обработчика события direct и назначьте ему функцию, а не строку:

document.getElementById('myId').onmouseover = function() {
  showMessage(document.getElementById('otherId').innerHTML);
};
Другие вопросы по тегам