2016-02-25 7 views
1

Что не так с приведенным ниже кодом? Согласно линде, getElementsByTagName должен вернуть array, поэтому в основном он должен работать просто отлично. Пожалуйста, объясните мне, что происходит не так?Что происходит с приведенным ниже кодом, когда я пытаюсь подсчитать поля пароля?

var outputs= 0; 
function countPasswds(){ 
    var v= document; 
    d=v.getElementsByTagName("input"); 
    x= d.getAttribute("type"); 
    for (var i=0; i< d.length; i++){ 
     if (x[i] == "password") 
      outputs++; 
    } 
    console.log("Number of Password Fields is: ", outputs); 
} 
+0

Если вам не нужна поддержка старых браузеров, вы также можете использовать 'querySelectorAll':' var count = document.querySelectorAll ('input [type = password]'). Length; '(https://jsfiddle.net/f4oyhqcs /) –

ответ

1
x= d.getAttribute("type"); 

Вы пытаетесь получить атрибут типа из документа.

Вы должны проверить атрибут типа на каждый вход, вы не можете просто получить его один раз и повторно использовать его повсюду.

Переместите вызов get get get в цикле for и примените его к элементу элемента.

1

Я исправил это для вас, пожалуйста, попробуйте следующее:

function countPasswds() { 
    var inputType; 
    var outputs = 0; 
    var inputs = document.getElementsByTagName("input"); 
    for (var i = 0; i < inputs.length; i++) { 
     inputType = inputs[i].getAttribute("type"); 
     if (inputType == "password") 
      outputs++; 
    } 
    console.log("Number of Password Fields is: ", outputs); 
} 

Существовало много проблем с вашей функцией. Прежде всего, не используйте имена имен символов, это делает ваш код чрезвычайно трудным для чтения или понимания.

вы настроить for петля для числа input элементов, но внутри цикла, пытался получить 'i'-th значение x.

Основная часть исправления заключалась в перемещении функции getAttribute внутри цикла.

+0

Я добавил некоторые объяснения, надеюсь, что это поможет. – Adam

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

  • Нет связанных вопросов^_^