Как проверить пустое значение в 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">
тогда он скажет "нет значения"
однако, если функция не может работать с этим:
Я пробовал:
(timetemp[0].value == null)
(timetemp[0].value === null)
(timetemp[0].value == undefined)
(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/
вот что я изменил:
- началось с получения всех
input
s viaTagName
. Это делает массив - инициализации
i
Сvar
и затем петля черезtimetemp
массив с помощьюtimetemp.length
собственность. - используется
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++)