Ответ 1
Комментарий в качестве ответа:
if (timetime[0].value)
Это работает, потому что любая переменная в JS может быть оценена как логическая, поэтому обычно она будет содержать вещи, которые пусты, null или undefined.
Я работаю над методом извлечения массива скрытых вхождений в моей форме, например:
<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">
Затем он скажет "Нет значения"
Однако функция if не может работать с этим:
Я пробовал:
(timetemp[0].value == null)
(timetemp[0].value === null)
(timetemp[0].value == undefined)
(timetemp[0].value == '')
Кажется, что значение по умолчанию для else всегда равно.
Любые идеи?
Комментарий в качестве ответа:
if (timetime[0].value)
Это работает, потому что любая переменная в JS может быть оценена как логическая, поэтому обычно она будет содержать вещи, которые пусты, null или undefined.
Сначала я проверил, для чего инициализируется инициализация i
, чтобы убедиться, что элементы, возвращаемые getElementsByName
, являются тем, что, по вашему мнению, являются. Может быть, разделить проблему, попробовав ее с жестко запрограммированным именем, например timetemp0
, без конкатенации. Вы также можете запустить код через отладчик браузера (FireBug, Chrome Dev Tools, IE Dev Tools).
Кроме того, для вашего if-condition это должно быть достаточно:
if (!timetemp[0].value) {
// The value is empty.
}
else {
// The value is not empty.
}
Пустая строка в Javascript является значением false, поэтому логическое отрицание этого приведет вас к if-блоку.
Ваш script кажется некорректным в нескольких местах.
Попробуйте это
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
через TagName
. Это делает массивi
с помощью var
, а затем зациклирован через массив timetemp
, используя свойство timetemp.length
.timetemp[i]
для ссылки на каждый input
в for statement
Счетчик в вашем цикле for отображается неверно (или нам не хватает кода). Здесь работает Fiddle.
Этот код:
//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++)
По-моему, использование "if (value)" для оценки значения, является ли пустое значение не строгим, поскольку результат "v? true: false" является ложным, когда значение v равно 0 (0 не пустое значение). Вы можете использовать эту функцию:
const isEmptyValue = (value) => {
if (value === '' || value === null || value === undefined) {
return true
} else {
return false
}
}