Как проверить наличие пустого значения в Javascript? - PullRequest
13 голосов
/ 09 августа 2011

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

<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 ]

38 голосов
/ 09 августа 2011

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

if (timetime[0].value)

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

3 голосов
/ 22 декабря 2017

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

const isEmptyValue = (value) => {
    if (value === '' || value === null || value === undefined) {
        return true
    } else {
        return false
    }
}
3 голосов
/ 09 августа 2011

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

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

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

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

1 голос
/ 09 августа 2011

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

Попробуйте это

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. начался с получения всех input s через TagName.Это делает массив
  2. инициализированным i с var, а затем циклически перебирает массив timetemp с использованием свойства timetemp.length.
  3. используется timetemp[i] для ссылки на каждый input в for statement
0 голосов
/ 09 августа 2011

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