Редактировать: Тема помечена как повторяющаяся. Я просто хотел сказать, что я не доволен ответами другого поста. В принятом ответе используется не такой хороший способ решения этой проблемы. Кроме того, я дал понять, что я прочитал все эти сообщения раньше и испытываю трудности с пониманием этой конкретной проблемной области в javascript.Javascript addEventListener не работает с петлей
Я вообще не понимаю. Я действительно много читаю, особенно о закрытии, но я не получаю это ... им на это часами. Почему следующий код не работает? Im теперь абсолютно потерян, и мне нужен кто-то, кто мог бы действительно указать, как я могу преодолеть такие ситуации, когда мой индекс не может быть распознан в моей функции события.
Как это работает? Мой addEventListener просто не работает, поскольку индекс распознается только вне его.
var lastResponse;
var alpha = document.getElementById('alpha');
var httpRequest;
function initAjax(url) {
httpRequest = new XMLHttpRequest();
httpRequest.open('POST', url, true);
httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
httpRequest.send();
httpRequest.onreadystatechange = function() {
if (httpRequest.readyState === 4 && httpRequest.status === 200) {
var response = httpRequest.responseText;
document.getElementById("omega").innerHTML = response;
fn();
}
}
}
alpha.addEventListener("click", function() {
initAjax("test.php");
});
var x = document.getElementById("omega").children;
function fn() {
for(var i=0; i < x.length; i++){
console.log(x.length);
document.getElementById("omega").addEventListener("click", function(event){
hello(i, event);
}, false);
}
}
function hello(index, event){
console.log(event.currentTarget.children[index]);
}
Обновленного код
- Ajax получает содержимое с соответствующей дивой
- Когда запрос завершен Javascript впрыскивает возвращаемые данные от сервера до омеги.
- Омега имеет детей.
- Теперь я хочу нажать на одного из этих детей и получить их индекс.
вы можете объяснить, что вы ожидаете, и что на самом деле произошло? – Fabricator
Возможно, попробуйте document.getElementById («omega»). AddEventListener («click», function (event) { hello (i, event); } .bind ({}), false); – blessenm
@blessenm Вы имели в виду '.bind (this)'? –