Javascript检查多个输入为空,返回一个值

时间:2011-11-09 16:52:42

标签: javascript jquery if-statement

好吧,伙计们,在我继续之前,我知道我想要做的事情可以通过众多变量来完成等等。但是我必须想象我正在做的事情可以更简单地完成。所以我所拥有的是一个包含4个字段的表单,我想检查这四个字段中是否有空白。然后每个空白,我想添加一个类并使用jquery UI效果'shake'来通知。然后我想得到一个真实或错误的回应,真实的是所有人都不是空白而且假的是4中的任何一个都是空白的。所以我拥有的是...... HTML ......

<form name = "regin" id = "regin">
  <div id = "form_hold">
  <div><label>Username</label><input type="text" id = "Rusername" name = "Rusername" /><div class = 'verdiv' id = 'rvuname'></div></div>
  <div><label>Email</label><input type="text" id = "Remail" name = "Remail" /><div class = 'verdiv' id = 'rvemail'></div></div>
  <div><label>Password</label><input type="password" id = "Rpassword" name = "Rpassword" /><div class = 'verdiv' id = 'rvpass1'></div></div>
  <div><label>Confirm</label><input type="password" id = "Rpassword2" name = "Rpassword2" /><div class = 'verdiv' id = 'rvpass2'></div></div>
  </div>
  <button type="button" class = "thoughtbot" id = "registerButton">Register</button>
  </form>

和javascript / jquery ......

if($username == ''){
    $('#Rusername').parent().find('.verdiv').addClass('error');
    $('#Rusername').parent().effect("shake", { times:3 }, 50);
}
if($email == ''){
    $('#Remail').parent().find('.verdiv').addClass('error');
    $('#Remail').parent().effect("shake", { times:3 }, 50);
}   
if($password == ''){
    $('#Rpassword').parent().find('.verdiv').addClass('error');
    $('#Rpassword').parent().effect("shake", { times:3 }, 50);
}
if($checkval == ''){
    $('#Rpassword2').parent().find('.verdiv').addClass('error');
    $('#Rpassword2').parent().effect("shake", { times:3 }, 50); 
}

现在是否有一个顶级函数来“测试”这些陈述中的每一个,看它们是否属实?感谢。

6 个答案:

答案 0 :(得分:9)

你可以循环:

$('#Rusername, #Remail, #Rpassword, #Rpassword2').each(function() {
  if ($(this).val() == '') {
    $(this).parent().effect('shake', {times: 3}, 50).find('.verdiv').addClass('error');
  }
});

但理想情况下,我会在其父元素中添加一个类,并将选择器简化为:

$('.parent_class input');

编辑:代码不完整 - 我删除了一个左大括号。

答案 1 :(得分:1)

怎么样:

$("form input:text").each(function() {
    if ($(this).val() == "") {
       $(this).parents().find('.verdiv').addClass('error');
       $(this).parent().effect("shake", { times:3 }, 50);
    }
});

- 编辑 -

要回答您的其他问题,您可以向字段添加属性,例如data-type =“email”等,然后修改javascript:

$("form input:text").each(function() {
    var isValid = new Function("value", "validate" + $(this).attr("data-type") + "(value);");
    if ($(this).val() == "" && !isValid($(this).val())) {
       $(this).parents().find('.verdiv').addClass('error');
       $(this).parent().effect("shake", { times:3 }, 50);
    }
});

您需要为“validateemail”,“validatetext”等添加函数,这些函数对于有效字段返回true,对于无效字段返回false。

答案 2 :(得分:0)

您可以为每个输入添加data-validate=true属性,然后执行以下操作:

function validate() {
var valid = true;
$("[data-validate]").each(function () {
    var el = $(this);
    if(el.val() == "") {
        el.parent().find('.verdiv').addClass('error');
        el.parent().effect("shake", { times:3 }, 50);
        valid = false;
    }
});

return valid
}

答案 3 :(得分:0)

在要验证的每个输入字段上放置相同的类,例如validatefield

然后假设$username$email是每个输入字段的值,这应该有效:

var valid = true;
$(".validatefield").each(function() {
    if ($(this).val() == "") {
        $(this).parent().find('.verdiv').addClass('error');
        $(this).parent().effect("shake", { times:3 }, 50);
        valid = false;
    }
});

答案 4 :(得分:0)

    $('input [type=text]').each(function(event){
    if($(this).val()=='')
    {
    //Do here shaking and error showing.
    }
    });

答案 5 :(得分:0)

有点复杂和肮脏,但可能有效。

var items = { 'username':'Rusername', 'email':'Remail', 'password':'Rpassword', 'checkval':'Rpassword2' };
$.each( items, function( val, id ) {
    eval('if($'+val+' == \'\') { ....copy your codes here... }');
});