Как проверить пустое значение в JavaScript?

Я работаю над методом извлечения массива скрытых входов в моей форме, как так

<input type="hidden" value="12:34:00" name="timetemp0">
<input type="hidden" value="14:45:00" name="timetemp1">
<input type="hidden" value="15:12:00" name="timetemp2">
<input type="hidden" value="16:42:12" name="timetemp3">
<input type="hidden" value="16:54:56" name="timetemp4">
<input type="hidden" value="17:03:10" name="timetemp5">

моя функция javascript извлекает их по отдельности с помощью getElementsByName ('timetemp' +i)

    for (i ; i < counter[0].value; i++)
        {
//finds hidden element by using concatenation of base name plus counter

var timetemp = document.getElementsByName('timetemp'+i);

//if there is a value alert that value to user - this is just for testing purposes at the moment
//because there is only one of timetemp.i then it occupies position 0 in array
            if (timetemp[0].value == null)
            {
                alert ('No value');

            }
            else
            {
                alert (timetemp[0].value);

            }
}

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

<input type="hidden" value="" name="timetemp16">

тогда он скажет "нет значения"

однако, если функция не может работать с этим:

Я пробовал:

  1. (timetemp[0].value == null)
  2. (timetemp[0].value === null)
  3. (timetemp[0].value == undefined)
  4. (timetemp[0].value == '')

всегда кажется, что по умолчанию используется предложение else.

какие идеи?

5 ответов


комментарий в качестве ответа:

if (timetime[0].value)

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


во-первых, я бы проверил, что i инициализируется, чтобы увидеть, возвращаются ли элементы getElementsByName что вы думаете они. Возможно, разделите проблему, попробовав ее с жестко закодированным именем timetemp0, без конкатенации. Вы также можете запустить код через отладчик браузера (Палий, Chrome Dev Tools, IE Dev Tools).

кроме того, для вашего if-состояния этого должно быть достаточно:

if (!timetemp[0].value) {
    // The value is empty.
}
else {
    // The value is not empty.
}

пустая строка в Javascript это ложное значение, поэтому логическое отрицание этого приведет вас в if-блок.


ваш сценарий кажется неправильным в нескольких местах.

попробуй такое

var timetemp = document.getElementsByTagName('input');

for (var i = 0; i < timetemp.length; i++){
    if (timetemp[i].value == ""){
        alert ('No value');
    }
    else{
        alert (timetemp[i].value);
    }
}

пример:http://jsfiddle.net/jasongennaro/FSzT2/

вот что я изменил:

  1. началось с получения всех inputs via TagName. Это делает массив
  2. инициализации i С var и затем петля через timetemp массив с помощью timetemp.length собственность.
  3. используется timetemp[i] ссылка каждый input на for statement

на мой взгляд, использование " if (value) "для оценки значения, является ли пустое значение не строгим, потому что результат" v?true: false " является false, когда значение v равно 0 (0 не является пустым значением). Вы можете использовать эту функцию:

const isEmptyValue = (value) => {
    if (value === '' || value === null || value === undefined) {
        return true
    } else {
        return false
    }
}

счетчик в вашем цикле for кажется неправильным (или нам не хватает некоторого кода). вот рабочая скрипку.

этот код:

//Where is counter[0] initialized?
for (i ; i < counter[0].value; i++)

заменить:

var timeTempCount = 5; //I'm not sure where you're getting this value so I set it.

for (var i = 0; i <= timeTempCount; i++)