使用jQuery检查输入是否为空


491

我有一个表格,希望填写所有字段。如果单击某个字段然后又不填写,则我要显示红色背景。

这是我的代码:

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

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

我究竟做错了什么?


Answers:


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

而且,您不一定需要.length还是不必查看是否是>0因为空字符串无论如何都会得出false,但是出于可读性考虑,您是否愿意:

$('#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
我认为,如果将以下内容从:if(!$(this).val()更改为:if(!$(this).val()&& $(this).val()!=“ )
alfasin 2012年

2
$(this).val()。length <1
Tomas

3
YourObjNameSpace.yourJqueryInputElement.keyup(function(e){if($。trim($(this).val())){//修剪后的值是真值} else {//修剪后的值是假}}
Frankie Loscavio

我很少验证字段的长度,以致于我完全忽略了它.val().length,而是使用.length()了元素本身。
塔斯(Tass)2014年

为了提高鲁棒性,我还将在末尾添加.trim()
HQuser

155

每个人都有正确的想法,但我想更明确一些,并精简价值观。

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

如果您不使用.length,那么可以将'0'项标记为坏,并且如果没有$ .trim,则可以将5个空格项标记为ok。祝你好运。


18
绝对正确。修剪是必需的,尤其是在使用复杂的WYSIWYG编辑器(例如jWYSIWYG)时。
乔什·史密斯

我可以建议将值更改为val ---> if(!$。trim(this.val).length){//修剪后的零长度字符串$(this).parents('p')。addClass('警告'); }
K. Kilian Lindberg 2014年

this.val会在undefined那里。它必须是$(this).val()-但是没有跨浏览器的优势,因此出于简洁/速度考虑,我省略了它。
Alex Sexton

33

进行模糊处理太有限了。它假定重点放在表单字段上,因此我更喜欢在提交时进行操作,并通过输入进行映射。经过多年处理花哨的模糊,聚焦等技巧之后,保持简单易用性将在重要的地方产生更多的可用性。

$('#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..    
});

20
if ($('input:text').val().length == 0) {
      $(this).parents('p').addClass('warning');
}

未捕获的TypeError:无法读取未定义的属性“长度”
Chuck D

@ChuckD我遇到了同样的错误,我发现我想念$if (('input:text').val().length == 0) {应该是if ($('input:text').val().length == 0) {
fWd82 '18

16

您还可以使用..

$('#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');
    }
});

9

怎么没人提

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

在我看来更像jQuery


3
这在jQuery 1.9+中不起作用,因为它们更改了选择器过滤器的工作方式。jsfiddle.net/6r3Rk
Wick

2
我建议$(this).not('[value]')。addClass('warning')for 1.9 jsfiddle.net/znZ9e
Jamie Pate

1
我相信,这只会测试字段是否以value属性开头。它不会像验证所需的那样测试实际的表单字段值。jsfiddle.net/T89bS ...不管您在其中键入什么内容,没有值属性的字段都会被鲑鱼拍打。
Wick

5

keyup事件将检测用户是否也清除了该框(即,在IE中,退格引发该事件,但退格并未引发该事件)

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

if (!this.value) {
    alert('The box is empty');
}});

4

考虑改用jQuery验证插件。对于简单的必填字段,这可能有点过大了,但它已经足够成熟,可以处理您甚至还没有想到的极端情况(在遇到它们之前,我们当中的任何一个都不会)。

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

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


3

:empty伪选择用于查看元素是否包含没有孩子的,你应该检查该值:

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

3

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

像这样:

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

3

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


2

这是一个使用键盘输入选定输入的示例。它还使用修剪,以确保仅空格字符的序列不会触发真实的响应。这是一个示例,可用于启动搜索框或与该功能类型相关的内容。

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

2
$(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


1

您可以尝试如下操作:

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

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


好的解决方案,但请注意,这仅在函数调用时输入不为空且仅当值保存在输入的“ value”属性中时才有效。
Fabian von Ellerts

0
<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>// :)

您可能还需要修剪空白。
猛禽2015年

0

使用HTML 5,我们可以使用“必需”的新功能,只需将其添加到所需的标签中即可,例如:

<input type='text' required>


2
而且所有浏览器都不支持此功能。。。您必须添加js检查和服务器端检查
Reign.85 2014年

问题标题,“使用jQuery检查输入是否为空”
JoshYates1980 17-4-7

0

大量的答案,想补充一下,您也可以使用:placeholder-shownCSS选择器来完成。使用IMO时更干净一些,尤其是如果您已经在使用jQ并且在输入中使用占位符。

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选择器。如果在输入上使用必需的属性,则可以使用这些选择器。


0

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

input[type="radio"]:read-only {
        pointer-events: none;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.