1

我面临一个我无法弄清楚的奇怪错误。我有一个表单,它提交一组 2 个单选按钮 1 个男性和一个女性,如下所示:

<label class="radio">
    <input type="radio" name="gender" id="femaleRadio" value="f">
    Vrouw
</label>
<label class="radio">
    <input type="radio" name="gender" id="maleRadio" value="m">
    Man
</label>

通过 jQuery AJAX 我将它发送到 php...但是当我echo发布它时它总是显示选择了男性。即使我选择了女性。为什么是这样?

$gender = strip_tags(trim($_POST['gender']));
echo $gender; exit;

我总是得到 M。如果我删除 HTML 中的男性选项,我得到 F。这必须有一个简单的解决方案,但我找不到它。

这是一段javascript,我从表单中获取所有数据

var el = $(this),

url = el.attr('action'),
type = el.attr('method'),

data = {}

// The loop to get al form data
el.find('[name]').each(function(index, value) {

    var el = $(this)
    name = el.attr('name'),
    value = el.val();

    //make data object
    data[name] = value;

});

提交时验证单选按钮

//Do some client side validation first
if (!$("#femaleRadio").prop("checked") && !$("#maleRadio").prop("checked")) {

    //Check if radio button is selected
    $('#regError').html("<strong>Fout: </strong> Selecteer een geslacht");
    $('#regError').fadeIn();
    return false;
}
4

1 回答 1

3

在此我们需要知道单选按钮是如何工作的。

单个组中的所有单选按钮将共享相同的名称。

在你的情况下 - gender

因此,当我们选择任何一个选项并提交表单时,只有选中的单选按钮的值会存储在gender.

但是根据您编写的 JavaScript/jQuery 代码,您只需获取每个元素的值并将其作为其名称的值。

在这种情况下,您不会检查是否选择了任何单选按钮。

您可以尝试以下代码

data['gender'] = $('[name=gender]:checked').val();

如果未选择任何内容 - 该gender属性将未定义。

您可以根据需要更改此逻辑。

从代码看来,您正在迭代所有可用的字段名称。在这种情况下,您可以像这样更新

// The loop to get al form data
el.find('[name]').each(function(index, value) {

    var el = $(this)
    name = el.attr('name'),
    value = el.val();

    //make data object
    data[name] = value;

    //If this element is a radio button
    if($(this).is(':radio')) {
        data[name] = $('[name=' + name + ']:checked').val();
    }

});
于 2013-08-18T17:32:01.690 回答