5

索引.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';
    }
}

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

4

7 回答 7

4

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

如果您不想要性别字段的默认选中状态,请在单选之前添加一个具有相同名称和空值的隐藏输入字段:

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

表单是按顺序处理的,因此如果选中单选,其值将覆盖隐藏的输入值

于 2013-02-10T03:09:54.820 回答
3
<input type="radio" name="gender" value="" style="display:none;" checked>

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

更新为按照@Larzan 的建议添加“已检查”。谢谢!

于 2015-09-09T01:04:09.470 回答
0

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

于 2013-02-10T03:42:37.990 回答
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"}
}
于 2018-09-07T11:01:22.747 回答
0

在您的情况下,需要将“已检查”属性添加到一个单选按钮以预先选择一个作为默认值。此信息来自 jQuery 文档[链接 1] 和 HTML 规范(链接自 jQuery 文档)[链接 2]。

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

于 2018-09-07T11:10:50.363 回答
0

在您的情况下,需要将“已检查”属性添加到一个单选按钮以预先选择一个作为默认值。此信息来自 jQuery 文档[链接 1] 和 HTML 规范(链接自 jQuery 文档)[链接 2]。

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

于 2018-07-07T17:20:04.433 回答
-1

这是您的问题的解决方案:

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

  event.preventDefault();
})

享受 :)

于 2013-02-10T03:30:31.950 回答