2011-09-28 46 views
1

我是javascript新手。我試圖建立一個複雜的形式,同時學習JS和JQ ......不是一件容易的事。此代碼有效,但我不知道兩行代碼是什麼,所以我想我會在這裏問。新手:檢查表單初始化時是否檢查單選按鈕。這個代碼是什麼意思?

此代碼所做的是通過數組循環查看單選按鈕複選框是否已勾選爲yes或no。當用戶重新訪問他/她正在填寫的表單時,它會在初始化時運行。如果myRadioButton爲yes,代碼將附加到取消隱藏的textfield元素,如果不是,則保持隱藏狀態。

我不知道第5行和第6行做了什麼(從第二條if語句開始)。請一些有知識的人,請將這些句子轉錄成幾句話,就像他們在教程中做的那樣?我真的很感激!

var rbVal = ""; 
var rbBtn = JQuery("[name=\"myRadioButton[]\"]"); 
for (var i = 0; i < rbBtn.length; i++) 
if (rbBtn[i].checked) { 
    if (rbVal != "") rbVal += ","; 
    rbVal += rbBtn[i].value; 
} 
if(rbVal != "yes"){ 
    doSomething; 
    } 
else { 
    doSomethingElse; 
    } 
+0

WOW!反應速度令人難以置信,如此深入。非常感謝! James Allardice,我特別感謝你進一步解釋DOM信息。謝謝! – ggatlanta

回答

0

這代碼檢查所有單選按鈕與一個共享名myRadioButton[],以確保如果一個被選中的值被添加到一個逗號分隔rbVal字符串。

var rbBtn = JQuery("[name=\"myRadioButton[]\"]"); < - 得到單選按鈕

for (var i = 0; i < rbBtn.length; i++) <的陣列 - 通過陣列中的每個按鈕的循環。

if (rbBtn[i].checked) { < - 如果按鈕被選中,它會檢查是否已經設置了rbVAl。 < - 要麼你錯過了這裏的東西,或者它是錯誤的程序

0

第5行將rbVal的值與空字符串("")進行比較。如果rbVal不等於(!=)爲空字符串,則包含逗號字符的字符串會附加到rbVal。例如,如果rbVal包含字符串「hello」,那麼在執行該行後,它將包含「hello」。

第6行然後將值rbBtn[i].value附加到rbValrbBtn是一個類似數組的對象(事實上,它看起來就是jQuery的一個實例,它包含與選擇器匹配的任何東西),並且當您使用數組語法訪問jQuery對象時,您將獲得實際的DOM元素而不是另一個jQuery對象,所以value屬性是DOM元素的實際value屬性(通過它的外觀,這將是一個單選按鈕)。

所以,如果你有這樣一個單選按鈕:

<input type="radio" value="someVal">

那麼你的循環會導致rbVal == "someVal"

如果你有兩個單選按鈕:

<input type="radio" value="someVal"> 
<input type="radio" value="anotherVal"> 

,那麼你最終會與rbVal == "someVal,anotherVal"。你可以從中看到該循環的總體目的是 - 構建一個由jQuery選擇器匹配的所有單選按鈕值的逗號分隔字符串。

+0

儘管您的回答非常有幫助,但我對整個rbVal變量感到困惑。在我看來,將rbBtn附加到rbVal總是會導致除了「yes」或「no」(myRadioButton的兩個值)之外的東西。因此,在上面的類比中,「rbVal ==」someVal,anotherVal「 「對於rbVal來說,永遠不會產生簡單的」是「或」否「。您(或某人)是否會謹慎地詳細說明? – ggatlanta

0

奇怪的是,這是使用jQuery抓取單選按鈕和一些香草JavaScript來查看返回的單選按鈕是否被選中。

  • var rbVal = ""; initalises用空字符串""一個新的變量。

  • var rbBtn = JQuery("[name=\"myRadioButton[]\"]");獲取文檔中所有被稱爲myRadioButton[]的元素。

  • for (var i = 0; i < rbBtn.length; i++)循環遍歷每個返回的元素(可能有多個,因爲myRadioButton[]是一個單選按鈕的數組,因此末尾的[])。 i是返回元素數組中的當前索引。

  • if (rbBtn[i].checked)看看單選按鈕是否被「檢查」(如果你喜歡,「開」)。

  • rbVal += rbBtn[i].value;:如果當前的單選按鈕被選中(請記住,for()循環通過他們所有),獲取它的value屬性和附加(將其添加到)無論是目前在rbVal。 例如,如果rbVal包含Hello並且單選按鈕的值是world那麼rbVal將最終包含Hello world

  • if(rbVal != "yes")如果rbVal值不相等(!=yes,那麼我們所說的doSomething功能。

  • 如果rbVal確實包含yes,那麼我們要調用的函數doSomethingElse

    else { 
        doSomethingElse; 
    } 
    
相關問題