【问题标题】:checking each required input for empty value with jQuery使用 jQuery 检查每个所需输入的空值
【发布时间】:2012-01-14 14:48:16
【问题描述】:

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

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>

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

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

再次感谢!

【问题讨论】:

  • 你能粘贴你的html代码吗?这会有所帮助
  • @DorinDuminica @JesseB 我刚刚做了。谢谢!

标签: jquery forms required-field


【解决方案1】:

这个?

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

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

【讨论】:

    【解决方案2】:

    “更改”事件适用于 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);
      }
    });
    

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

    【讨论】:

    • 酷,几乎可以工作了!每当填写其中任何一项时,它都会更改为 button2,即使并非所有必填字段都已填写。我尝试将“this”更改为“.required”,但似乎随机工作。我们可以以某种方式将 .each 方法与它结合起来吗?谢谢!!
    • 根据您的要求调整了JS逻辑并更新了我的帖子,现在“button1”只有在用户填写所有字段时才会出现,否则默认会出现“button1”。
    • 更改了工作代码的链接,以便您可以直接查看。
    【解决方案3】:

    使用each()函数(doc):

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

    【讨论】:

    • 谢谢!我认为它应该工作,但不认为它是。你介意看看我编辑的问题吗?
    • @claras 也许你可以把class="required" 代替ids 和input 元素然后用$(".required").each... 访问它
    【解决方案4】:

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

    [未经测试]

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

    【讨论】:

      【解决方案5】:

      简单,为添加度量添加红色边框

      先做个样式

      .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;
      

      【讨论】:

        猜你喜欢
        • 2019-07-08
        • 2012-05-18
        • 1970-01-01
        • 2010-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-05
        相关资源
        最近更新 更多