Radio不使用serializeArray进行序列化

时间:2013-02-10 02:44:57

标签: php jquery html serialization

的index.php:

<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';
    }
}

它序列化除了单选按钮以外的所有内容。有什么问题?

7 个答案:

答案 0 :(得分:4)

正如@undefined告诉你的那样,未发送未选中的复选框和无线电。

如果您不想为性别字段指定默认状态,请在收音机前添加一个名称相同且空值相同的隐藏输入字段:

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

表格按顺序处理,因此如果选中了收音机,其值将覆盖隐藏的输入值

答案 1 :(得分:3)

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

像这样添加一个额外的无线电选项,该值将为空,并且不会向用户显示。

答案 2 :(得分:0)

除非您将类型更改为隐藏,否则永远不会发布未选中的选择控件和未选中的复选框或单选按钮控件。

答案 3 :(得分:0)

在您的情况下,需要在一个单选按钮上添加“选中”属性,以将其默认选择为一个。此信息来自jQuery docs [链接1]和HTML规范(链接至jQuery文档)[链接2]。

链接:  1. https://api.jquery.com/serializeArray/  2. https://www.w3.org/TR/html401/interact/forms.html#h-17.13.2

答案 4 :(得分:0)

让我感到非常惊讶的是,没有人提到这样做的正确方法。如果使用表单,则应该使用submit事件,然后可以轻松使用serializeArray函数。

这是一个例子:

$( "#magic-form" ).submit(function( event ) {
    console.log($(this).serializeArray());
    event.preventDefault();
});

这为您提供了一个漂亮的数组,其中包含您的所有值,包括单选框。

示例输出

{
    {name: "company", value: "asd"}
    {name: "name", value: "asd"}
    {name: "email", value: "sad@web.de"}
    {name: "phone", value: ""}
    {name: "radio-group", value: "value3"}
    {name: "terms", value: "on"}
}

答案 5 :(得分:0)

在您的情况下,需要在一个单选按钮上添加“选中”属性,以将其默认选择为一个。此信息来自jQuery docs [链接1]和HTML规范(链接至jQuery文档)[链接2]。

链接:1. https://api.jquery.com/serializeArray/ 2. https://www.w3.org/TR/html401/interact/forms.html#h-17.13.2

答案 6 :(得分:-1)

以下是您的问题的解决方案:

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

  event.preventDefault();
})

享受:)