Подтвердить что ты не робот

Как проверить пустое значение в 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">

Затем он скажет "Нет значения"

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

Я пробовал:

  • (timetemp[0].value == null)
  • (timetemp[0].value === null)
  • (timetemp[0].value == undefined)
  • (timetemp[0].value == '')

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

Любые идеи?

4b9b3361

Ответ 1

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

if (timetime[0].value)

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

Ответ 2

Сначала я проверил, для чего инициализируется инициализация 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-блоку.

Ответ 3

Ваш 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

Ответ 4

Счетчик в вашем цикле 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++)

Ответ 5

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

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