2013-11-30 4 views
2

У меня есть этот код, который я пытался исправить в течение нескольких часов.Как использовать переменные в документе.getElementById

<script language="JavaScript"> 
    <!-- 

    function generate(){ 
    var titels = new Array(); 
    var i = 0; 
    for(i;i<9;i++){ 
    var test = 'h1-0'+ i; 
     titels[i] = document.getElementById(test).textContent; 
    } 

    document.getElementById("uitkomst").value = titels[1];  
    } 
    --> 
</script> 

Это дает мне ошибку

TypeError: document.getElementById(...) is null 
titels[i] = document.getElementById(test).textContent; 

Но когда я изменяю «h1-0» + я на «h1-0» + 5 это работа, и я не получаю сообщение об ошибке, так как я могу это исправить? Почему Javascript настолько раздражает при использовании переменных?

+5

Одно из тех значений, которые вы генерируете, не соответствует элементу на вашей странице. – Pointy

+0

Спасибо за легкий ответ :), просто сказав, что вы спасли мне массу работы. – user3052776

ответ

1

Добавить еще одну переменную:

var element; 

и использовать его в петлю, чтобы удержать результат выборки (или пытается извлечь) элемент:

for (i; i < 9; i++) { 
    element = document.getElementById('h1-0' + i); 
    if (element) { 
    titles[i] = element.textContent; 
    } 
    else { 
    console.log("Element " + i + " not found."); 
    } 
} 

Затем проверьте консоль на см., который отсутствует.

0

Есть несколько способов устранить эту проблему - вы можете протестировать недостающий объект и пропустить этот случай, или вы можете поймать исключение, которое будет выбрано и действовать соответствующим образом в обработчике исключений.

Вот как вы могли бы обрабатывать недостающие объекты в коде:

function generate(){ 
    var titels = []; 
    var i, item, test; 
    for (i = 0; i < 9; i++) { 
     test = 'h1-0'+ i; 
     item = document.getElementById(test); 
     if (item) { 
      titels[i] = item.textContent; 
     } 
    } 
    document.getElementById("uitkomst").value = titels[1];  
} 

Если это действительно все, что ваш код делает, то вам не нужен цикл for, потому что вы только с помощью [1] элемент из массива, и вы можете сделать это:

function generate() { 
    var item = document.getElementById("h1-01"); 
    if (item) { 
     document.getElementById("uitkomst").value = item.textContent; 
    } 

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