В последние пару дней возникли проблемы. Я пытаюсь максимально упростить свой код, и теперь я достиг стадии, на которой я пытаюсь добавить прослушиватели событий через JavaScript, чтобы мой HTML выглядел более аккуратным.
-HTML-сегмент-
<input type="button" id="googleSearchButton" />
<input type="button" id="youtubeSearchButton" />
<input type="button" id="wikiSearchButton" />
<input type="button" id="facebookSearchButton" />
<input type="button" id="twitterSearchButton" />
<input type="button" id="tumblrSearchButton" />
<input type="button" id="dropboxSearchButton" />
Сегмент JavaScript
var contIDArray = ["google", "youtube", "wiki", "facebook", "twitter", "tumblr", "dropbox"];
window.load = initAll();
function initAll(){
applyProperties();
}
function applyProperties(){
for (var i = 0; i < contIDArray.length; i++){
addEventListeners(contIDArray[i] + "SearchButton");
}
}
function addEventListeners(id){
document.getElementById(id).addEventListener("click", testAlert(id), false);
}
function testAlert(id){
alert(id + " clicked")
}
Теория
Как, я надеюсь, вы можете видеть, цикл FOR будет зацикливаться до тех пор, пока у него не закончатся значения в массиве контейнера. Каждый раз он будет выводить место в массиве с последующим «SearchButton». Например, при первом зацикливании он выдаст «googleSearchButton», второй раз - «youtubeSearchButton» и так далее.
Теперь я знаю, что цикл FOR работает для применения свойств, потому что я использую его для применения значений Button и текста заполнителя текстового поля в других сегментах моего проекта.
Я сделал так, чтобы он добавил простую тестовую функцию ("testAlert ()") и установил ее для передачи идентификатора элемента, который ее вызвал. Я настроил его так, что после добавления прослушивателей событий я могу просто нажать на каждую кнопку, и она сообщит свой идентификатор и сообщит мне, что она была нажата.
Проблема
Теперь, теоретически, я думал, что это будет работать. Но кажется, что цикл FOR запускает функцию «addEventListeners», которая, в свою очередь, добавляет прослушиватель событий для запуска «testAlert» при нажатии. Но он просто запускает функцию «testAlert», как только добавляет обработчик событий, и не срабатывает при нажатии.
Я прошу прощения, если это кажется слишком сложным, я всегда переусердствовал с длиной моего объяснения. Надеюсь, вы сможете увидеть, что я пытаюсь достичь, из моего кода, а не из моих объяснений.
Помощь будет высоко ценится. :)