2013-07-12 46 views
1

哪些錯誤與下面的行代碼...Jquery的字符串和邏輯OR

其保持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控制檯(而不是Watch面板)中將顯示錯誤消息,並且代碼根本無法運行。你永遠不會到達你的斷點。

在你的屏幕截圖的語法錯誤是在你的手錶表達式。刪除監視表達式,這些錯誤消息將消失。

在更新後的截圖可以看我的語法錯誤是什麼。看看你的手錶式近看(這裏重新格式化,以避免滾動):

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

這不是一種表達,這是一個if聲明。如果你想使用它作爲一個監視表達式,你只需要內部的if語句表達。也就是說,除去if(和最終)

關於你正在做具體的測試,jQuery的.val()方法並返回undefined如果沒有選中的元素。請注意,jQuery文檔中存在錯誤:它表示在沒有匹配元素時.val()返回null。這是不正確的;它在這種情況下返回undefined。這裏是the line of code in the jQuery source,返回undefined(因爲它是一個簡單的return;沒有值)。

但是,這是undefined值,而不是字符串"undefined"。你可以用radioval === undefined進行測試。或者你可以使用radioval == null。請注意0​​而不是===;此測試與nullundefined值都匹配。這可能是最安全的選擇,以防jQuery團隊決定更改代碼以匹配文檔,並開始返回null而不是undefined。 (一種不可能的可能性,但你永遠不知道。)通過測試radioval == null它會測試兩個值。

+0

當我沒有選擇任何單選按鈕val返回我undefined –

+0

@Baadshah''undefined「'與'undefined'非常不同。您能否確認在刪除斷點時問題消失? –

+0

@dystroy感謝讓我意識到。如何檢查undefined呢? –

0

.val()返回一個字符串值,null或在多選值的情況下Array,所以你可以嘗試:

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( );不確定的回報(typeof運算未定義===未定義)它是否被選中或「ON」(typeof運算「的」 ===字符串),如果它的檢查。

一個小例子:

<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"){ 
    ... 
}