2013-07-12 2 views
1

Что случилось с ниже строк кода ...Jquery строка и логическое ИЛИ

Его держать complaing что systax error..at т.п.

if((radioval === "undefined") || (radioval === null) || (radioval === "null")) { 

полное условие в действии

if($('#digitallogin').is(":checked")){ 
       var radioval = $("input[name=certificateradio]:checked").val();//its giving the string "user" 
       if((radioval === "undefined") || (radioval === null) || (radioval === "null")) { //this line 
        $("#login_error").text("please select the signin certificate"); 
         return false; 
       } 

      } 

enter image description here

Спасибо за любую помощь.

+1

@AlexFilipovici почему это? –

+0

@AlexFilipovici Я положил === для строгого сравнения. Хотя я тоже тестировал с ==. –

+0

В этом нет ничего плохого. – gdoron

ответ

2

Там нет синтаксической ошибки в коде. Если у кода была синтаксическая ошибка, в консоли Firebug (а не в панели «Наблюдение») появится сообщение об ошибке, и код не будет запущен вообще. Ты никогда не доберешься до точки останова.

Синтаксические ошибки на вашем скриншоте содержатся в ваших часах. Удалите выражения часов, и эти сообщения об ошибках исчезнут.

В обновленном скриншоте я вижу, что такое синтаксическая ошибка. Всмотритесь в вашем выражении часы (переформатирован здесь, чтобы избежать прокрутки):

if(
    (radioval === "undefined") || 
    (radioval === null) || 
    (radioval === "null") 
) 

Это не выражение, что это if заявление. Если вы хотите использовать его в качестве выражения часов, вам нужно просто выражение внутриif. То есть, удалите if( и окончательный ).

Что касается конкретных тестов, которые вы делаете, метод .val() jQuery возвращает undefined, если элементов нет. Обратите внимание, что в документации jQuery есть ошибка: он говорит, что .val() возвращает null, когда нет соответствующих элементов. Это неверно; он возвращает undefined в этом случае. Вот the line of code in the jQuery source, который возвращает undefined (потому что это простой return; без значения).

Но это значение undefined, а не строка "undefined". Вы проверили бы это с помощью radioval === undefined. Или вы можете использовать radioval == null. Обратите внимание на == вместо ===; этот тест соответствует значениям null и undefined. Это может быть самая безопасная ставка, если команда jQuery когда-либо решает изменить код в соответствии с документацией и начать возвращать null вместо undefined. (Маловероятная возможность, но вы никогда не знаете.) Проведя тестирование radioval == null, он будет тестировать любое значение.

+0

, когда я не выбрал ни одной радиокнопки val, возвращает меня undefined –

+0

@Baadshah '" undefined "' сильно отличается от 'undefined'. Можете ли вы подтвердить, что проблема исчезает, когда вы удаляете контрольные точки? –

+0

@dystroy благодарит меня за то, что я понял. Как я могу проверить неопределенное? –

0

.val() возвращает строковое значение, null или Array в случае MULTISELECT значения, так что вы можете попробовать:

if (/null|undefined/i.test(radioval) || !radioval.length){ /*...*/ } 

Поскольку вы, кажется, чтобы проверить [один из] $("input[name=certificateradio]") проверяется, он может также достаточно, чтобы сделать

if((!$("input[name=certificateradio]:checked").length) { 
    $("#login_error").text("please select the signin certificate"); 
    return false; 
} 

Или еще короче

if($('#digitallogin').is(":checked") && 
    !$("input[name=certificateradio]:checked").length) { 
    $("#login_error").text("please select the signin certificate"); 
    return false; 
} 
+0

val также может возвращать null. –

+0

Вы правы. Он также может возвращать массив в случае мультиселектора. Ответ отредактирован. – KooiInc

0

Попробуйте

if((typeof radioval === "undefined") || (radioval === null) || (radioval == "null")) { 
+0

Это будет делать что-то другое и как оно должно решить синтаксическую ошибку? –

+0

@commit typeof просто используется для открытия любого закрытого ассоциированного типа с любым конкретным временем во время выполнения. –

+0

@dystroy typeof просто используется для открытия любого закрытого ассоциированного типа с любым конкретным временем во время выполнения. –

0

в третьем сравнении radioval radioval == "нуль", а не === неопределенные

+2

Почему именно? Вы можете объяснить ? –

+0

=== - это строгое сравнение со значением, связанным с типом данных. –

0

$ ("вход [имя = certificateradio]: проверено"). Val (); возвращает undefined (typeof undefined === undefined), если он не установлен или «включен» (typeof «on» === string), если он установлен.

небольшой пример:

<input name="certificateradio" type="checkbox" /> 
<button>run</button> 

$("button").click(function(){ 
    console.log($("input[name=certificateradio]:checked").val()); 
    console.log(typeof $("input[name=certificateradio]:checked").val()); 
}); 

http://jsfiddle.net/x2uw4/1/

пытаются использовать:

if($("input[name=certificateradio]:checked").val() ==="on"){ 
    ... 
} 
Смежные вопросы