试图找出我的单选按钮在我的表单中未定义的原因

时间:2015-08-24 22:55:18

标签: jquery html forms validation

我正在处理这个表单,我正在研究用自己的代码验证它的方法。我很确定我有一个可行的想法,但是我无法获得单选按钮的值。我知道他们有价值,因为每次点击一个人说出它的价值是什么,以及它是否“被检查”时我都会设置一个警报。但是当我的表单验证器试图捕获无线电值时,它们会继续以未定义的方式返回。什么?

这是我的jsFiddle,我的所有代码都在那里。我只会在下面添加一些代码段。

用于提醒无线电点击的jQuery:

$(":radio").click(function(){
                alert($(this).val() + " - " + $(this).is(":checked"));  
            });

我得到的结果是:

enter image description here enter image description here

用于提醒表单值的jquery:

$("#invalid").click(function(){
                alert (
                    "BreederName: " + bName.val() + " - " + bName.hasClass("i-invalid") + 
                    "\nYearStart: " + year.val() + " - " + year.hasClass("i-invalid") + 
                    "\nKennelName: " + kName.val() + " - " + kName.hasClass("i-invalid") + 
                    "\nWebsite: " + website.val() + " - " + website.hasClass("i-invalid") + 
                    "\nCredit: " + credit.val() + 
                    "\nExercise: " + exercise.val());   
            });

当字段为空或者条目无效时,我的代码会添加一个i-invalid类,我正在使用此警报进行检查。看起来像这样:

enter image description here

显然,我的网址验证器无效,但我稍后会担心。很明显,我并没有正确地定位我的单选按钮,但是我已经使用了所有不同的方式来定位这两个字段,并且我一直都是未定义的。有人能帮我弄清楚我哪里出错吗?

HTML表单字段(示例)

    <!--Radio buttons for credit field-->
    <td colspan="2"><h3>Would you like your contribution acknowledged?</h3></br></br>
<input type="radio" name="credit" value="yes" width="20">
Yes, I'd like my name listed on the Contributor's page. </br>
<input type="radio" name="credit" value="no" width="20">
No, I'd rather contribute anonymously.

<!--Sample Radio buttons for exercise field, there are 10 of them -->
<input type="radio" name="exercise" value="5" width="20">5
<input type="radio" name="exercise" value="6" width="20">6</br>

无线电字段的jQuery变量

credit = $(":radio[name=credit]:checked");
exercise = $(":radio[name=exercise]:checked");

// also tried . . .

    credit = $("input radio[name=credit]:checked");
    exercise = $("input radio[name=exercise]:checked");

    credit = $("input[name=credit]:checked");
    exercise = $("input[name=exercise]:checked");

credit = $("form radio[name='credit']:checked"); <!-- put the field name in single quotes-->
exercise = $("form radio[name='exercise']:checked");

1 个答案:

答案 0 :(得分:1)

您正在做的是在credit事件中设置全局变量exercisedocument.ready。因此,当 DOM 加载时,单选按钮的值为 null ,因为此时未检查任何内容。

您需要做的是在单选按钮click事件中设置全局变量的值。这样,当单击单选按钮时,它们将始终更新。

请参阅下面的代码。

$(":radio").click(function() {
    credit = $(":radio[name=credit]:checked");
    exercise = $(":radio[name=exercise]:checked");
    console.log($(this).val() + " - " + $(this).is(":checked"));
});

这是 JSFIDDLE 。希望这有帮助。

编辑: 我已将alert替换为console.log。请检查控制台的输出。