2009-10-07 4 views
2

Скажите, пожалуйста, что не так с этим кодом:Назначают «OnMouseOver» обработчик события

<script type="text/javascript" > 

function createimg() 
     { 
     var img = new Image(); 
     img.src='link/to/image'; 
     img.alt='Next image'; img.id = 'span1'; img.style.zIndex = 10; 
     img.style.position = 'absolute'; img.style.display='block'; img.style.top = '130px'; 
     img.style.padding='10px'; img.style.left='440px'; img.className ='dynamicSpan'; 
     document.body.appendChild(img); 
     return img; 
     } 

    function al() 
    { 
    alert('loaded'); 
    } 
    a = createimg(); 

    a.onmouseover = al(); 

</script> 

В конкретной последней части, где я пытаюсь присвоить «OnMouseOver» обработчик события а, который является элементом изображения. По какой-то причине он не назначает этот обработчик событий и вместо этого выполняет функцию загрузки страницы.

Что не так?

Тони

+1

быть осторожным с закодированного 'id', как имеющие более одного элемента с одинаковым идентификатором в DOM будет нарушать HTML спецификации. –

ответ

13
a.onmouseover = al; 

Когда вы пишете al() вы звоните функцию на месте и присваивая значение возврата функции (который не определен, так как нет return заявления) в a.onmouseover. Вместо этого вы хотите назначить функцию, поэтому вам просто нужно удалить круглые скобки.

+1

+1 за причину, почему –

+0

Ударьте меня к этому. Да, это правильный ответ. –

+0

, который помогает! но теперь моя al-функция вообще не выполняется, даже при наведении на изображение. Может ли что-нибудь еще быть неправильным? –

0

Попробуйте

a.onmouseover = al; 

вместо

a.onmouseover = al(); 
2

Ну, для начала, ваш код не отформатирован таким образом, что позволяет легко читать.

Но ваша проблема здесь:

a.onmouseover = al(); 

То, что вы действительно хотите:

a.onmouseover = al; 

() оператор вызывает функция. Таким образом, выражение al() равно результату выполнения функции al, что означает, что функция al должна быть выполнена до ее результата (который в этом случае равен undefined) может быть присвоен a.onmouseover.

В противоположность этому, если вы просто использовать al, выражение равно функции объектаal, которая является то, что вы на самом деле хотите присвоить событие. В этом случае, когда событие запускается, выполняется функция al.

Смежные вопросы