2013-11-01 3 views
0

Так что я просто пытаюсь определить, когда значение поля ввода пустое или пустое. Это было бы просто с функцией .val() jQuery. Объединение, что с обратной проверкой и вы получите это:Обратное подтверждение jQuery пустое поле ввода

if($('input').val() != '' || $('input').val() != null) 
{ 
    //any code 
} 

Однако по какой-то причине этого не сделал трюк, как это обычно делает. Вместо этого я должен был использовать это:

if(!$('input').val() == '' || !$('input').val() == null) 
{ 
    //any code 
} 

Так я задаюсь вопросом: Что такое разница все тоже между этими двумя? И почему первый код не работает так же, как второй код?

jsFiddle первого кода,
jsFiddle второго кода

Обновлено:

Добавлено окно выбора.

ответ

2

Прежде всего, val() не может быть пустой строкой и null в то же время. Вот почему if($('input').val() != '' || $('input').val() != null) будет всегда возвращение true. В этом случае необходимо &&.

Второй пример - путь более интересный. Поскольку JS не является строго типизированным языком, !$('input').val() == '' пытается сравнить !$('input').val() с пустой строкой, т. Е. Отбрасывает $('input').val() в bool, отрицает его, получает false и сравнивает это значение с пустой строкой.

Наилучшая его часть: false == '' равно ... true! Неявное преобразование типов сделало это хорошо.

Что вы можете сделать?

  1. В первом примере просто изменить || к &&:

    if ($('input').val() != '' && $('input').val() != null) 
    
  2. Во втором вы должны исправить операции заказа:

    if (!($('input').val() == '') && !($('input').val() == null)) 
    

    или лучше

    if (!($('input').val() == '' || $('input').val() == null)) 
    
+0

Теперь у меня еще есть вопросы: Вы сказали: «val() не может быть пустой строкой ** и ** null в одно и то же время». Я знаю, поэтому я использовал оператор OR ('' '' вместо оператора AND ('&&'). – nkmol

+0

@nkmol, посмотрим: 1) '' '!! =' '|| ''! = null' -> 'false || true' -> 'true'; 2) 'null! = '' || null! = null' -> 'true || false' -> 'true' – Smileek

+0

@nkmol, наконец, нашел его: http://en.wikipedia.org/wiki/De_Morgan%27s_laws – Smileek

Смежные вопросы