2014-09-27 3 views
0
function prepareEventHandlers() {  
    var myImga = document.getElementsByTagName('img'); 

    myImga.onclick = function() { 
     alert("This is Eminem Known As RAP God. The Best Rapper ever"); 
    } 
} 

window.onload = function() { 
    prepareEventHandlers(); 
} 

Почему эта функция не работает в JavaScript.Прикрепление элементов onclick to img не работает

+4

'myImga' является DOM Collection (а [NodeList] (https://developer.mozilla.org/en-US/docs/Web/API/NodeList)) , а не один Элемент. В любом случае убедитесь, что вы точны: «функция не работает» может означать ряд вещей, указанных выше. – user2864740

+0

Getelementsbytagname возвращает массив элементов, вы не можете просто добавить обработчик onclick к нему –

+0

Прокрутите коллекцию и присоедините обработчик событий в отдельности. – melancia

ответ

2

Изменить myImga.onclick на myImga[0].onclick. Он будет работать для первого элемента.

+0

Спасибо, человек <3. Он работает –

+0

Обязательно объясните * почему * указанное изменение требуется. (Кроме того, это произойдет, если 0 изображений или 2 или более изображений, которые должны иметь привязку к событию.) – user2864740

+0

, потому что document.getElementByTagName возвращает массив элементов ... если нет img, он возвращает пустой массив i.e. []. Если массив пуст, то передача индекса 0 не будет работать. И если вы хотите связать событие click со всем img, тогда вам нужно пройти через массив. –

1

То, что вы пытаетесь сделать, не имеет особого смысла, но, однако, с помощью jquery вы можете добиться этого довольно легко.

Проблема в том, что вы извлекаете массив элементов, собственный javascript не поддерживает установку событий click для массива элементов. Кроме того, если на странице нет img, ваш код не сработает и сломает другой код javascript дальше в коде. Если вы с другой стороны используете jquery и события click, вы проверите это для вас и сделаете доступ доступным, если изображение загрузится после загрузки javascript.

Надеется, что это помогает

первым включает JQuery:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 

Тогда вы можете просто добавить это к вашей странице

<script>  
    $('img').on(document, 'click', 
     function() { 
      alert("This is Eminem Known As RAP God. The Best Rapper ever"); 
     } 
    ); 
</script> 
1

Вам нужен цикл для цикла по объектам, которые Возврат:

function myAlert(){ 
     alert("You clicked the picture. Good for you."); 
} 

function prepareEventHandlers() {  
    var myImga = document.getElementsByTagName('img'); 

    for(var i=0,l=myImga.length; i<l; ++i) myImga[i].onclick = myAlert; 
} 

window.onload = function() { 
    prepareEventHandlers(); 
} 

Возможно, и, возможно, стоит проверить это в браузере. Используйте Ctrl + Shift + J воспитывает инструменты разработчика в хроме - вы даже можете попробовать это из Stackoverflow - а затем введите:

myImga = document.getElementsByTagName('img')

и вы сразу увидите, что myImga является массивом.

Линия работает в средствах разработчика браузера, если вы используете анонимную функцию для установки предупреждения. Счастливое оповещение.

0

вы можете использовать:

<script> 
function prepareEventHandlers() {  
    var myImga = document.getElementsByTagName('img'); 
for(x in myImga){ 
    myImga[x].onclick = function() { 
     alert("This is Eminem Known As RAP God. The Best Rapper ever"); 
    } 
} 
} 

window.onload = function() { 
    prepareEventHandlers(); 
} 
</script> 
Смежные вопросы