使用jQuery检查每个所需的空值输入

时间:2011-12-07 01:47:24

标签: jquery forms required-field

我正在检查表单中的每个必填字段。我试过这个,但它只适用于第一个输入。如何使其适用于每个输入?

if($('[required]').val() != ''){ 
        $('.button1').fadeIn(0);
        $('.button2').fadeOut(0);
}else{
    $('.button1').fadeOut(0);
    $('.button2').fadeIn(0);
}

编辑:对于更多上下文,这是我在其下方的另一个函数,无论何时更改和HTML代码都适用。

$('[required]').change(function() {
if($('[required]').val() != ''){ 
        $('.button1').fadeIn(0);
        $('.button2').fadeOut(0);
    }else{
    $('.button1').fadeOut(0);
    $('.button2').fadeIn(0);
}
});

HTML

我有很多这样的输入:

<input type="text" id="title" name="title" value="" required>
<input type="text" id="size" name="size" value="" required>
<input type="text" id="length" name="length" value="" required>

按钮:

<a class="button1" style="display:none" >button 1</a>
<a class="button2">button 2</a>

所以我想在页面加载时和每次更改时检查空字段。

顺便说一句,我没有围绕这些的表格标签,因为它是针对移动设备的,并且认为这不是必要的,如果这有任何区别。

再次感谢!

5 个答案:

答案 0 :(得分:17)

此?

$( ':input[required]', yourForm ).each( function () {
    if ( this.value.trim() !== '' ) {
        // ...
    }
});

其中yourForm是对FORM元素的引用(您也可以在此处使用选择器)。这是上下文 - 您只想在表单中搜索字段。

答案 1 :(得分:7)

“更改”事件适用于SELECT框和RADIO按钮元素,但不适用于INPUT元素。您必须使用“焦点/模糊”事件来处理输入字段,在您的情况下,“模糊”事件非常适合。

如果你想使用jQuery处理许多元素,那么最好使用基于CLASS的操作,在你的情况下,只需为所有输入字段添加“required”相同的类,并使用该类对这些字段进行操作。

我按照上面的说明调整了你的代码块,检查一次,然后让我知道更新的代码是否也不适合你,更新代码块是:

HTML代码

<input type="text" id="title" name="title" value="" class="required">
<input type="text" id="size" name="size" value="" class="required">
<input type="text" id="length" name="length" value="" class="required">

<a class="button1" style="display:none" >button 1</a>
<a class="button2">button 2</a>

JS代码

$('.required').blur(function() {
  var empty_flds = 0;
  $(".required").each(function() {
    if(!$.trim($(this).val())) {
        empty_flds++;
    }    
  });

  if (empty_flds) {
    $('.button1').fadeOut(0);
    $('.button2').fadeIn(0);
  } else {
    $('.button1').fadeIn(0);
    $('.button2').fadeOut(0);
  }
});

您也可以直接查看工作代码here

答案 2 :(得分:1)

使用each()功能(doc):

$('[required]').each(function() {
    if($('[required]').val() != ''){ 
         $('.button1').fadeIn(0);
         $('.button2').fadeOut(0);
    }else{
         $('.button1').fadeOut(0);
         $('.button2').fadeIn(0);
    }
});

答案 3 :(得分:1)

你需要获取每个元素的值,如果所有元素都不为空,那么首先做一件事,如果其中任何一个是空的,那么做第二件事,对吗?

[未测试]

// test if any of the values are not empty
var is_empty = false;
$('[required]').each( function(idx, elem) {
    is_empty = is_empty || ($(elem).val() == '');
});

// now do the thing, but only if ALL the values are not empty
if ( ! is_empty) {
    $('.button1').fadeIn(0);
    $('.button2').fadeOut(0);
}else{
    $('.button1').fadeOut(0);
    $('.button2').fadeIn(0);
}

答案 4 :(得分:0)

简单,为了增加尺度,添加红色边框

首先制作一种风格

.redborder { border: 2px solid red; }

然后是一个简单的Javascript

// Remove all redborders
    $("#my_form :input.redborder").removeClass("redborder");
// Check all required fields have text, you can even check other values
    $("#my_form :input[required]").each(function() {
        if ($.trim($(this).val()) == "") $(this).addClass("redborder");
    });
// If any input has a red border, return
    if ($("#todo_edit_form .redborder").length > 0 ) return;