jQueryを使用して入力が空かどうかを確認する


492

すべてのフィールドに入力したいフォームがあります。フィールドをクリックして入力しなかった場合、赤い背景を表示したいと思います。

これが私のコードです:

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

フィールドが入力されているかどうかに関係なく、警告クラスが適用されます。

何が悪いのですか?


回答:


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

空の文字列はとにかくfalseと評価されるので、.lengthそれが必要かどうかは必ずしも必要ではありませ>0んが、読みやすさのために必要な場合は、次のようにします。

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

常にテキストフィールド要素で動作することが確実な場合は、を使用できますthis.value

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

また$('input:text')、複数の要素を取得するか、コンテキストを指定するか、または単一の要素thisへの参照だけが必要な場合はキーワードを使用することに注意してください(コンテキストの子孫/子に1つのテキストフィールドがある場合)。


2
if(!$(this).val())から:if(!$(this).val()&& $(this).val()!= ""に変更すると、うまく機能すると思います。 )
アルファシン2012

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

3
YourObjNameSpace.yourJqueryInputElement.keyup(function(e){if($。trim($(this).val())){//トリミングされた値が真である} else {//トリミングされた値が偽である}}
Frankie Loscavio

私はフィールドの長さをあまり頻繁に検証しないため、完全に見落とし.val().length、代わり.length()に要素自体を使用していました。
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」のエントリは不良としてフラグが付けられ、5つのスペースのエントリは$ .trimなしでokとマークされる可能性があります。幸運のベスト。


18
絶対的に正しい。特に細かいWYSIWYGエディター(jWYSIWYGなど)を使用する場合は、トリミングが必要です。
Josh Smith、

値をvalに変更することをお勧めします---> if(!$。trim(this.val).length){//トリム後の長さゼロの文字列$(this).parents( 'p')。addClass( '警告'); }
K.キリアンリンドバーグ

this.valundefinedそこにあるでしょう。それはする必要$(this).val()があります-しかし、クロスブラウザの利点はありませんので、簡潔さ/速度のために省略しました。
Alex Sexton 14年

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

Uncaught TypeError:undefinedのプロパティ 'length'を読み取れません
Chuck D

@ChuckD私は同じエラーを得ていたと私は私が行方不明になった考え出し$if (('input:text').val().length == 0) {それがあるべきif ($('input:text').val().length == 0) {
fWd82

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
フィールドが値属性で始まっているかどうかをテストするだけだと思います。検証に必要なような実際のフォームフィールド値はテストしません。jsfiddle.net/T89bS ...値属性のないフィールドは、何かを入力してもサーモンでスラップされます。
ウィック

5

keyupイベントは、ユーザーがボックスをクリアしたかどうかも検出します(つまり、バックスペースはイベントを発生させますが、IEではバックスペースはkeypressイベントを発生させません)。

    $("#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

もう1つ考えてみたいことがあります。現在、警告クラスは空の場合にのみ追加できます。フォームが空ではなくなったときにクラスを再度削除するのはどうでしょう。

このような:

$('#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()空の値を持つ入力にのみイベントを適用します。


良い解決策ですが、これが機能するのは入力が空でない場合と、値が入力の「値」属性に保存されている場合にのみ機能することに注意してください。
Fabian von Ellerts、2018

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

おそらく空白も削除する必要があります。
ラプター

0

HTML 5では、「必須」の新機能を使用できます。次のように、必要なタグに追加するだけです。

<input type='text' required>


2
そして、すべてのブラウザーはこれをサポートしていません... jsチェックとサーバーサイドチェックを追加する必要があります
Reign.85

質問のタイトル、「jQueryを使用して入力が空かどうかを確認する」
JoshYates1980

0

すばらしい回答の集まりです:placeholder-shown。CSSセレクターを使用してこれを行うこともできます。特にすでにQを使用していて、入力にプレースホルダーがある場合は、IMOを少しクリーンに使用します。

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;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.