验证无线电输入

时间:2015-12-03 17:13:08

标签: javascript jquery validation

我的表单上有2个地址条目。我还有2个单选按钮来指定"首选"邮寄地址。

我试图验证这些2并且我不确定我是否正确地执行了这些操作。如果我填写了两个地址似乎有效,但如果其中一个地址没有填写,我似乎无法正确验证。

这是执行验证的javascript:

function checkMailingPrefs() {
    var prefs = ["MailPrefHome", "MailPrefBusi"];
    var field = ["HomeAddress1", "BusinessAddress1"];
    for (i = 0; i < 2; i++) {
        if ($("#"+prefs[i]).is(":checked") && $("#"+field[i]).val() == "") {
            $("#" + prefs[i]).prop('checked', false);
            $("#MailPrefBusi").validationEngine('showPrompt', 'You must select the correct Mailing Preference', 'error', true);
            return false;
        }
        if ($("#"+field[i]).val() == "" || !$("#"+prefs[i]).is(":checked")) {
            $("#MailPrefBusi").validationEngine({promptPosition : "bottomRight", scroll: true}).validationEngine('showPrompt', 'You must select the correct Mailing Preference', 'error',  true);
            return false;
        }
    }
    return true;
}

我使用的是jQueryValidationEngine,但它也没有正确验证它们。我只用它来显示这些字段的验证错误。

以下是标准:

如果选中MailPrefBusi,则必须填写BusinessAddress1。 如果选中MailPrefHome,则必须填写HomeAddress1。

如果未选中MailPrefxxx,则显示错误。如果没有填写xxxAddress1,则显示错误。

2 个答案:

答案 0 :(得分:0)

看起来你的第二个if语句if ($("#"+field[i]).val() == "" || !$("#"+prefs[i]).is(":checked")) {在你不想要的时候返回false。你应该能够用这个来完成你想要的东西:

function checkMailingPrefs() {
    var prefs = ["MailPrefHome", "MailPrefBusi"];
    var field = ["HomeAddress1", "BusinessAddress1"];
    for (i = 0; i < 2; i++) {
        if ($("#"+prefs[i]).is(":checked") && $("#"+field[i]).val() == "") {
            // enhanced validation function call here
            return false;
        }
    }
    //if the user hasnt checked anything, you can remove this if the form should validate without the user having to set a radio button
    if(!$("#MailPrefBusi, #MailPrefHome").is(":checked")) {
      // enhanced validation function call here
      return false
    }
    return true;
}

你可以看到它在这个JS小提琴上工作:https://jsfiddle.net/h0vj9r35/

希望有所帮助!

答案 1 :(得分:0)

如果您试图根据具有n no的场景中的复选框值来确定是否填充了相应的字段。复选框和字段,并希望避免硬编码值,您可以使用以下:

var prefs = ["MailPrefHome", "MailPrefBusi"];
var field = ["HomeAddress1", "BusinessAddress1"];
var allEmpty = false;
var valueError = ""
for (i = 0; i < 2; i++) 
{
    if ($("#"+field[i]).val() == "" || !$("#"+prefs[i]).is(":checked")) {
        if(!$("#"+prefs[i]).is(":checked"))
          valueError += prefs[i] + "," ;
         else if($("#"+field[i]).val() == "")
          valueError += field[i];
        allEmpty = true;            
    }      

    if ($("#"+prefs[i]).is(":checked") && $("#"+field[i]).val() == "")
    {
        $("#" + prefs[i]).prop('checked', false);
        allEmpty = false;
        alert("Need to enter " + field[i]);
        return false;
    }      

    if((i == 1) && allEmpty)
    {
        alert("You need to select " + valueError);
        return false;
    }
}
return true;

http://jsfiddle.net/n0303qd6/1/