2011-10-03 112 views
2

我正在創建調查。爲了我的目的,JS驗證是好的,我想確保選擇每個組中的單選按鈕。默認情況下,沒有選擇單選按鈕。據我瞭解,用戶代理自動將該值設置爲該組中的第一個單選按鈕值。 例如:單選按鈕默認值不一致

<input type="radio" name="question_1" value="1"> 
<input type="radio" name="question_1" value="2"> 
<input type="radio" name="question_1" value="3"> 

雖然均未預選(視覺),我可以檢查該組的值:

$('input[name="question_1"]').val(); 

這將返回「1」,第一個單選按鈕的值。這讓我很難看到一個沒有價值的「羣體」。

現在繼承人變得怪異。當我準備把數據上傳到我的PHP腳本,我抓住它的形式是這樣的:

$(pagesArray[currentPage]).children('form').serialize(); 

這抓住了我所有的表單數據的漂亮,但不會返回一個沒有按鈕單選按鈕組值檢查。爲什麼當沒有檢查到任何東西時,我沒有得到組中第一個按鈕的值?

回答

4
$('input[name="question_1"]').val(); 

想想這是幹什麼用的。它選擇與選擇器匹配的所有元素。這是所有三個要素。然後它調用val方法,該方法獲得第一個屬性的value屬性。 (如果選擇中有多個元素,則返回第一個元素的值。)選中哪個(如果有)元素是不相關的:未選定元素仍然具有value屬性集。

$(pagesArray[currentPage]).children('form').serialize(); 

但是,這樣做的邏輯非常不同。它查看瀏覽器將發送到服務器的字段。由於未經檢查的無線電字段未發送,因此它們不會被序列化。

所以,從你的問題引用:

用戶代理自動設置該組

這是錯誤的值到第一單選按鈕值。沒有一個全局值爲input[name="question_1"]的元素具有設置的值。有多個元素(其中沒有選擇任何元素),並且只是獲得第一個元素的值。

+0

謝謝!我一直在想,name屬性引用的「group」就是這個值,但是我看到我只是返回匹配集合中第一個radio的值。 – Hippocrates

2

要獲得單選按鈕組的值,應使用:checked過濾器。像

$('input[name="question_1"]:checked').val() 

示例 - jsFiddle

和序列化只會選擇成功控制爲每jQuery api,和一組沒有選中單選按鈕的不成功

摘錄:

注意:只有「successful controls」被序列化爲字符串。沒有 提交按鈕值被序列化,因爲表單未提交 使用按鈕。對於要包含在 序列化字符串中的表單元素的值,元素必須具有name屬性。僅當檢查框中包含 複選框和單選按鈕(「收音機」或「複選框」類型的輸入) 的值。來自文件選擇元素 的數據未被序列化。

0

在HTML 4中選擇初始單選按鈕的要求從來沒有真正被所有用戶代理所遵循,並在HTML5中被廢除。我會手動檢查列表中的第一個按鈕,並完成它。

http://css-tricks.com/5972-indeterminate-radio-buttons/

+0

希波克拉底不希望默認選中任何一個單選按鈕,但希望確保用戶選擇了一個。在一項調查中,默認情況下進行*任何*選擇會將調查結果偏向默認選擇,因此如果您完全關心調查的準確性,則絕對*不希望*默認。 –

+0

好點。我沒有仔細閱讀這個問題。 –