2013-02-10 47 views
2

的index.php連載:收音機不serializeArray

<form id = "regform" action = "registration.php" method = "POST"> 
    <label id = "namelabel">Username: </label> <input type = "text" name = "username" class = "username" maxlength = "40" placeholder = "Enter a Username"><br> 
    <label id = "namelabel">Password: </label> <input type = "password" class = "password" name = "password" placeholder = "Enter Password"><br> 
    <label id = "namelabel">Gender: </label> 
    <input type="radio" name="gender" value = "Male"> Male 
    <input type="radio" name="gender" value = "Female"> Female 
    <label id = "namelabel">Email: </label> <input type = "text" name = "email" class = "email" placeholder = "Enter your Email"><br> 
    <a href="#" title="Register" id = "register" style = "margin-left:25px;">Register</a> 
</form> 

$("#register").click(function() { 
    $.post($('#regform').attr("action"), $('#regform').serializeArray(), function (data) { 
     if (data == 'checkradio') { 
      $('#regmsg').html('Please choose a gender.'); 
     } 
    }); 
}); 

服務器端:

$required_fields = array('username','password','gender','email'); 
foreach($_POST as $key =>$value) { 
    if(empty($value) && in_array($key, $required_fields) === true){ 
     echo 'checkradio'; 
    } 
} 

它系列化以外的所有單選按鈕。問題是什麼?

+0

單選按鈕未選中時發生。 – undefined 2013-02-10 02:54:07

回答

3

正如@undefined告訴你的,不發送複選框和收音機。

如果你不想默認選中狀態爲您的性別字段做,然後用相同的名稱和空值的收音機前添加一個隱藏的輸入字段:

<input type="hidden" name="gender" value="" /> 

形式是按順序處理的,所以如果電臺被選中,其值將覆蓋隱藏的輸入值

+1

這會創建另一個不屬於無線電組的組成部分。當重複使用以前輸入的表單時,這會表現錯誤。 @Purple Tentacle答案效果更好,因爲它會將輸入保持在與其他可見單選按鈕相同的組中。 – Melanie 2017-03-06 20:56:03

0

這裏是你的問題的解決方案:

$("#register").click(function(event){ 
    if($("#regform").find("input[name='gender']").is(':checked')){ 
    $("#regform").submit() 
    } else { 
    alert("Choose the gender!"); 
    } 

    event.preventDefault(); 
}) 

享受:)

0

除非將類型更改爲隱藏,否則將不會張貼未選中的選擇控件和未選中的複選框或單選按鈕控件。

2
<input type="radio" name="gender" value="" style="display:none;"> 

添加一個額外的無線電選項,這個值將是什麼都不會顯示給用戶。