2013-04-07 2 views
1

Из моего чтения здесь я ожидаю, что этот код будет работать, но это не так. Я попробовал два способа добавить события click к кнопке «lonext». Ни одна из них не работает. Я не знаю, почему это может быть?GetElementbyID не сработает

window.onload = function() { 

var goSC = function() { //go to the sucess criteria section 
    document.getElementsByClassName("guidance1").style.display = "none"; 
    document.getElementsByClassName("guidance2").style.display = ""; 
    alert("button clicked"); 

//first try 
document.getElementById("lonext").addEventListener("click", function() { 
    goSC();  
    }, false); 

//second try 
document.getElementById("lonext").onclick = goSC; 

} 
+0

Вы должны показать свой HTML и как вы внедрили JavaScript на своей странице. – Cromax

ответ

3

В getElementsByClassName возвращает NodeList, потому что вы могли бы иметь много элементов в вашем DOM с тем же классом, не было ни одного элемента.

Итак:

var goSC = function() { 
    var guidance1 = document.getElementsByClassName("guidance1"); 
    for (var i = 0; i < guidance1.length; i++) { 
     guidance[i].style.display = "none"; 
    } 

    var guidance2 = document.getElementsByClassName("guidance2"); 
    for (var i = 0; i < guidance2.length; i++) { 
     guidance[i].style.display = ""; 
    } 

    alert("button clicked"); 
}); 

window.onload = function() { 
    document.getElementById("lonext").onclick = goSC; 
}; 

, который, если вы использовали jQuery может быть упрощена:

$(function() { 
    $('#lonext').click(function() { 
     $('.guidance1').hide(); 
     $('.guidance2').show(); 
    }); 
}); 

Я также настоятельно рекомендую вам с помощью яваскрипта средства отладки, такие как FireBug или Chrome панели инструментов разработчика для проверки ваш код javascript и увидеть возможные ошибки с ним. Вкладка Console будет содержать ценную информацию о возможных ошибках в вашем javascript-коде.

+1

Nit: 'getElementsByClassName' не возвращает массив, а объект типа« HTMLCollection », подобный массиву. Это различие имеет значение, поскольку в противном случае вы ожидали бы, что результат будет поддерживать методы массива, такие как ['push'] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/push), ['forEach'] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/forEach) и т. д., что неверно. –

+0

На самом деле это ['NodeList'] (https://developer.mozilla.org/en-US/docs/DOM/NodeList), а не массив; это означает, что вы не сможете использовать итераторы массива, такие как 'forEach'. – Bergi

+0

Спасибо, что указали это. Я обновил свой ответ. –

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