Uncaught TypeError: Невозможно прочитать свойство 'значение' из неопределенного - PullRequest
42 голосов
/ 01 июля 2011

У меня есть код JavaScript, который дает эту ошибку

Uncaught TypeError: Cannot read property 'value' of undefined

Код

var i1 = document.getElementById('i1');
var i2 = document.getElementById('i2');
var __i = {'user' : document.getElementsByName("username")[0], 'pass' : document.getElementsByName("password")[0] };
if(  __i.user.value.length >= 1 ) { i1.value = ''; } else { i1.value = 'Acc'; }

if(  __i.pass.value.length >= 1 ) { i2.value = ''; } else { i2.value = 'Pwd'; }

Что означает эта ошибка?

Ответы [ 7 ]

32 голосов
/ 01 июля 2011

Похоже, что одно из ваших значений, с ключом свойства 'значение' не определено.Проверьте, что i1, i2 и __i определены перед выполнением операторов if:

var i1 = document.getElementById('i1');
var i2 = document.getElementById('i2');
var __i = {'user' : document.getElementsByName("username")[0], 'pass' : document.getElementsByName("password")[0] };
if(i1 && i2 && __i.user && __i.pass)
{
    if(  __i.user.value.length >= 1 ) { i1.value = ''; } else { i1.value = 'Acc'; }

    if(  __i.pass.value.length >= 1 ) { i2.value = ''; } else { i2.value = 'Pwd'; }
}
10 голосов
/ 01 июля 2011

Либо document.getElementById('i1'), document.getElementById('i2'), либо document.getElementsByName("username")[0] не возвращает ни одного элемента. Убедитесь, что все элементы существуют.

8 голосов
/ 09 мая 2014

Попробуйте, это всегда работает, и вы получите НЕТ TypeError:

try{

    var i1 = document.getElementById('i1');
    var i2 = document.getElementById('i2');
    var __i = {'user' : document.getElementsByName("username")[0], 'pass' : document.getElementsByName("password")[0] };
    if(  __i.user.value.length >= 1 ) { i1.value = ''; } else { i1.value = 'Acc'; }
    if(  __i.pass.value.length >= 1 ) { i2.value = ''; } else { i2.value = 'Pwd'; }

}catch(e){
    if(e){
    // If fails, Do something else
    }
}
6 голосов
/ 01 июля 2011

Во-первых, вы должны убедиться, что document.getElementsByName ("username") [0] действительно возвращает объект, а не "undefined". Вы можете просто проверить как

if (typeof document.getElementsByName("username")[0] != 'undefined')

Аналогично для пароля другого элемента.

5 голосов
/ 17 апреля 2013

Посты здесь очень помогают мне в поиске решения для Uncaught TypeError: Невозможно прочитать свойство 'value' из неопределенной проблемы.

Здесь уже есть много правильных ответов, но здесь у нас нет комбинации из двух ответов, которые, я думаю, полностью решают эту проблему.

function myFunction(field, data){
  if (typeof document.getElementsByName("+field+")[0] != 'undefined'){
  document.getElementsByName("+field+")[0].value=data;
 }
}

Разница в том, что вы делаете проверку (если свойство определено или нет), и если проверка истинна, вы можете попытаться присвоить ему значение.

0 голосов
/ 15 апреля 2019

Ваш код выглядит как автоматически сгенерированный из другого кода - вы должны проверить, что HTML-элементы с id=i1 и i2 и name=username и password существуют до их обработки.

0 голосов
/ 22 октября 2018

Вы можете просто создать функцию, чтобы проверить, существует ли переменная, иначе вернет значение по умолчанию:

function isSet(element, defaultVal){

    if(typeof element != 'undefined'){

        return element;

    }

    console.log('one missing element');

    return defaultVal;
}

И использовать его при проверке переменных:

var variable = isSet(variable, 'Default value');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...