6

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

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>

所以我想在页面加载时以及它们发生变化时检查空字段。

顺便说一句,我没有围绕这些的表单标签,因为它是用于移动设备的,并且认为它不是真的有必要,如果这有什么不同的话。

再次感谢!

4

5 回答 5

18

这?

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

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

于 2011-12-07T01:53:53.410 回答
7

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

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

我已经按照上面的说明调整了您的代码块,检查它们一次,然后让我知道更新的代码是否也不适用于您,更新代码块是:

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);
  }
});

您也可以直接在此处检查工作代码。

于 2011-12-07T06:23:14.430 回答
1

使用each()函数(doc):

$('[required]').each(function() {
    if($('[required]').val() != ''){ 
         $('.button1').fadeIn(0);
         $('.button2').fadeOut(0);
    }else{
         $('.button1').fadeOut(0);
         $('.button2').fadeIn(0);
    }
});
于 2011-12-07T01:51:15.520 回答
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);
}
于 2011-12-07T01:58:52.580 回答
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;
于 2014-02-06T20:08:45.847 回答