使用 jQuery 检查输入是否为空

Check if inputs are empty using jQuery

提问人:Keith 提问时间:12/6/2009 最后编辑:Danil SperanskyKeith 更新时间:12/1/2021 访问量:1445230

问:

我有一个表格,我希望填写所有字段。如果一个字段被点击,然后没有填写,我想显示一个红色背景。

这是我的代码:

$('#apply-form input').blur(function () {
  if ($('input:text').is(":empty")) {
    $(this).parents('p').addClass('warning');
  }
});

无论是否填写字段,它都会应用警告类。

我做错了什么?

jQuery 验证

答:

857赞 meder omuraliev 12/6/2009 #1
$('#apply-form input').blur(function()
{
    if( !$(this).val() ) {
          $(this).parents('p').addClass('warning');
    }
});

而且您不一定需要或查看它是否因为空字符串的计算结果无论如何都是假的,但出于可读性的目的,如果您愿意:.length>0

$('#apply-form input').blur(function()
{
    if( $(this).val().length === 0 ) {
        $(this).parents('p').addClass('warning');
    }
});

如果您确定它将始终对 textfield 元素进行操作,那么您可以只使用 .this.value

$('#apply-form input').blur(function()
{
      if( !this.value ) {
            $(this).parents('p').addClass('warning');
      }
});

此外,您应该注意,如果您只想引用一个单独的元素,请抓取多个元素、指定上下文或使用关键字(前提是上下文的后代/子元素中有一个文本字段)。$('input:text')this

评论

2赞 Tomas 4/30/2014
$(this).val().length < 1
3赞 Frankie Loscavio 7/31/2014
YourObjNameSpace.yourJqueryInputElement.keyup(function (e){ if($.trim($(this).val())){ // 修剪值为真 }else{ // 修剪值为假 } } }
24赞 Graviton 12/6/2009 #2
if ($('input:text').val().length == 0) {
      $(this).parents('p').addClass('warning');
}

评论

0赞 Chuck D 10/5/2017
未捕获的 TypeError:无法读取 undefined 的属性“length”
0赞 fWd82 3/20/2018
@ChuckD我遇到了同样的错误,我发现我应该在其中丢失$if (('input:text').val().length == 0) {if ($('input:text').val().length == 0) {
4赞 Christian C. Salvadó 12/6/2009 #3

伪选择器用于查看元素是否不包含子元素,您应该检查值::empty

$('#apply-form input').blur(function() {
     if(!this.value) { // zero-length string
            $(this).parents('p').addClass('warning');
     }
});
5赞 Dave Ward 12/6/2009 #4

请考虑改用 jQuery 验证插件。对于简单的必填字段来说,它可能有点矫枉过正,但它足够成熟,可以处理您甚至还没有想到的边缘情况(在我们遇到它们之前,我们任何人都不会想到)。

您可以使用“required”类标记必填字段,在 $(document).ready() 中运行 $('form').validate(),仅此而已。

它甚至也托管在 Microsoft CDN 上,以便快速交付:http://www.asp.net/ajaxlibrary/CDN.ashx

164赞 Alex Sexton 12/6/2009 #5

每个人都有正确的想法,但我喜欢更明确一点,并修剪值。

$('#apply-form input').blur(function() {
     if(!$.trim(this.value).length) { // zero-length string AFTER a trim
            $(this).parents('p').addClass('warning');
     }
});

如果您不使用 .length ,那么“0”的条目可能会被标记为错误,而 5 个空格的条目可能会在没有 $.trim 的情况下被标记为 OK。祝你好运。

评论

19赞 Josh Smith 10/30/2010
绝对正确。修剪是必要的,尤其是在使用挑剔的所见即所得编辑器(例如 jWYSIWYG)时。
0赞 K. Kilian Lindberg 3/20/2014
我可以建议将值更改为 val ---> if(!$.trim(this.val).length) { // 零长度字符串 AFTER a trim $(this).parents('p').addClass('warning');
0赞 Alex Sexton 4/1/2014
this.val会在那里。它必须是 - 但这没有跨浏览器的优势,所以我为了简洁/速度而省略了它。undefined$(this).val()
2赞 Konstantine Kalbazov 1/31/2011 #6

您可以尝试如下操作:

$('#apply-form input[value!=""]').blur(function() {
    $(this).parents('p').addClass('warning');
});

它只会将事件应用于具有空值的输入。.blur()

评论

0赞 Fabian von Ellerts 9/27/2018
很好的解决方案,但请注意,这仅在函数调用时输入不为空并且仅当值保存在输入的“value”属性中时才有效。
5赞 xorinzor 6/12/2011 #7

您可能还需要考虑的另一件事,目前它只能添加警告类,如果它为空,当表单不再为空时再次删除该类如何。

喜欢这个:

$('#apply-form input').blur(function()
{
    if( !$(this).val() ) {
          $(this).parents('p').addClass('warning');
    } else if ($(this).val()) {
          $(this).parents('p').removeClass('warning');
    }
});
37赞 drewdeal 7/22/2011 #8

在模糊上这样做太有限了。它假设焦点集中在表单字段上,所以我更喜欢在提交时进行,并通过输入进行映射。经过多年处理花哨的模糊、焦点等技巧,让事情变得更简单将在重要的地方产生更多的可用性。

$('#signupform').submit(function() {
    var errors = 0;
    $("#signupform :input").map(function(){
         if( !$(this).val() ) {
              $(this).parents('td').addClass('warning');
              errors++;
        } else if ($(this).val()) {
              $(this).parents('td').removeClass('warning');
        }   
    });
    if(errors > 0){
        $('#errorwarn').text("All fields are required");
        return false;
    }
    // do the ajax..    
});
1赞 Maher 8/16/2012 #9
<script type="text/javascript">
$('input:text, input:password, textarea').blur(function()
    {
          var check = $(this).val();
          if(check == '')
          {
                $(this).parent().addClass('ym-error');
          }
          else
          {
                $(this).parent().removeClass('ym-error');  
          }
    });
 </script>// :)

评论

0赞 Raptor 2/24/2015
您可能还需要修剪空格。
9赞 Jamie Pate 11/30/2012 #10

怎么没人提

$(this).filter('[value=]').addClass('warning');

对我来说似乎更像 jquery

评论

3赞 Wick 8/1/2013
这在 jQuery 1.9+ 中不起作用,因为它们改变了选择器过滤器的工作方式。jsfiddle.net/6r3Rk
3赞 Jamie Pate 8/1/2013
我建议 $(this).not('[value]').addClass('warning') 1.9 jsfiddle.net/znZ9e
1赞 Wick 11/15/2013
我相信这只能测试字段是否以值属性开始。它不会像验证所需的那样测试实际的表单字段值。jsfiddle.net/T89bS......没有值属性的字段会被鲑鱼打耳光,无论您是否在其中键入内容。
1赞 Atlantiz 1/30/2014 #11

在 HTML 5 中,我们可以使用一个新功能“必需”,只需将其添加到您想要成为必需的标签中,例如:

<input type='text' required>

评论

2赞 Reign.85 10/14/2014
而且所有浏览器都不支持这个......您必须添加 js 检查和服务器端检查
1赞 JoshYates1980 4/8/2017
问题标题,“使用 jQuery 检查输入是否为空”
3赞 Frankie Loscavio 7/31/2014 #12

下面是一个对所选输入使用键控的示例。它还使用修剪来确保仅包含空格字符的序列不会触发真实的响应。此示例可用于启动搜索框或与该类型的功能相关的内容。

YourObjNameSpace.yourJqueryInputElement.keyup(function (e){
   if($.trim($(this).val())){
       // trimmed value is truthy meaning real characters are entered
    }else{
       // trimmed value is falsey meaning empty input excluding just whitespace characters
    }
}
3赞 Mauro 4/15/2015 #13
$(function() {
  var fields = $('#search_form').serializeArray();
  is_blank = true;
  for (var i = 0; i < fields.length; i++) {
    // excluded fields
    if ((fields[i].name != "locale") && (fields[i].name != "utf8")) {
      if (fields[i].value) {
        is_blank = false;
      }
    }
  }
  if (is_blank) {
    $('#filters-button').append(': OFF');
  }
  else {
    $('#filters-button').append(': ON');
  }
});

检查所有字段是否为空,并在Filter_button上附加 ON 或 OFF

4赞 Vanilla 9/25/2015 #14

function checkForm() {
  return $('input[type=text]').filter(function () {
    return $(this).val().length === 0;
  }).length;
}

19赞 Zigri2612 5/17/2016 #15

你也可以使用..

$('#apply-form input').blur(function()
{
    if( $(this).val() == '' ) {
          $(this).parents('p').addClass('warning');
    }
});

如果您对空间有疑问,请尝试..

$('#apply-form input').blur(function()
{
    if( $(this).val().trim() == '' ) {
          $(this).parents('p').addClass('warning');
    }
});
6赞 Ouss Ama 9/30/2017 #16

keyup 事件将检测用户是否也清除了该框(即 backspace 引发事件,但 backspace 不会在 IE 中引发 keypress 事件)

    $("#inputname").keyup(function() {

if (!this.value) {
    alert('The box is empty');
}});
1赞 Mark Carpenter Jr 2/9/2019 #17

很棒的答案集合,想补充一点,您也可以使用 CSS 选择器来做到这一点。使用 IMO 更干净一点,特别是如果您已经在使用 jQ 并且在输入上有占位符。:placeholder-shown

if ($('input#cust-descrip').is(':placeholder-shown')) {
  console.log('Empty');
}

$('input#cust-descrip').on('blur', '', function(ev) {
  if (!$('input#cust-descrip').is(':placeholder-shown')) {
    console.log('Has Text!');
  }
  else {
    console.log('Empty!');
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<input type="text" class="form-control" id="cust-descrip" autocomplete="off" placeholder="Description">

如果您有所需的输入,也可以使用 和 选择器。如果在输入上使用必需属性,则可以使用这些选择器。:valid:invalid

1赞 Dion 1/20/2020 #18

一个干净的纯 CSS 解决方案,这将是:

input[type="radio"]:read-only {
        pointer-events: none;
}
1赞 keivan kashani 11/29/2020 #19

请使用此代码输入文本

$('#search').on("input",function (e) {

});

1赞 Malek Tubaisaht 9/23/2021 #20
if($("#textField").val()!=null)

这对我有用

2赞 fazal 10/18/2021 #21

试试这个:

function empty(){
        if ($('.text').val().length == 0)
        {
            alert("field should not be empty");
        }
    }
7赞 Sonu Chohan 12/1/2021 #22

如何在jQuery中检查null,未定义和空

  $(document).on('input', '#amt', function(){
    let r1;
    let r2;
    r1 = $("#remittance_amt").val();
    if(r1 === undefined || r1 === null || r1 === '')
    {
      r1 = 0.00;
    }

    console.log(r1);
  });

评论

0赞 klewis 5/13/2022
非常灵活。此解决方案允许您检查输入实例中的其他内容。