Periksa apakah input kosong menggunakan jQuery


493

Saya memiliki formulir yang saya ingin semua bidang diisi. Jika bidang diklik dan kemudian tidak diisi, saya ingin menampilkan latar belakang merah.

Ini kode saya:

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

Itu berlaku kelas peringatan terlepas dari bidang yang diisi atau tidak.

Apa yang saya lakukan salah?


Jawaban:


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

Dan Anda tidak perlu .lengthatau melihat apakah itu >0karena string kosong bernilai false, tetapi jika Anda ingin untuk tujuan keterbacaan:

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

Jika Anda yakin itu akan selalu beroperasi pada elemen textfield maka Anda bisa menggunakannya this.value.

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

Anda juga harus mencatat bahwa $('input:text')mengambil beberapa elemen, menentukan konteks atau menggunakan thiskata kunci jika Anda hanya ingin referensi ke elemen tunggal (asalkan ada satu bidang teks pada keturunan / anak-anak konteks).


2
Saya pikir itu akan bekerja lebih baik jika Anda mengubah dari: if (! $ (This) .val ()) menjadi: if (! $ (This) .val () && $ (this) .val ()! = "" )
alfasin

2
$ (ini) .val (). panjang <1
Tomas

3
YourObjNameSpace.yourJqueryInputElement.keyup (fungsi (e) {if ($. Trim ($ (this) .val ())) {// nilai yang dipangkas adalah kebenaran} lain {// nilai yang dipangkas adalah falsey}}
Frankie Loscavio

Saya jarang memvalidasi panjang bidang sehingga saya benar-benar diabaikan .val().lengthdan bukannya menggunakan .length()elemen itu sendiri.
Tass

Untuk ketahanan lebih, saya juga akan menambahkan .trim () di akhir
HQuser

155

Setiap orang memiliki ide yang tepat, tetapi saya ingin sedikit lebih eksplisit dan memotong nilai-nilai.

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

jika Anda tidak menggunakan .length, maka entri '0' dapat ditandai sebagai buruk, dan entri 5 spasi bisa ditandai sebagai ok tanpa $ .trim. Semoga berhasil.


18
Benar-benar tepat. Pemangkasan diperlukan, terutama ketika menggunakan editor WYSIWYG yang rewel (seperti jWYSIWYG, misalnya).
Josh Smith

Bolehkah saya menyarankan mengubah nilai menjadi val ---> if (! $. Trim (this.val). Length) {// string nol-panjang SETELAH trim $ (ini) .parents ('p'). AddClass (' peringatan'); }
K. Kilian Lindberg

this.valakan ada di undefinedsana. Itu perlu $(this).val()- tetapi tidak ada keuntungan lintas-browser untuk itu, jadi saya meninggalkannya untuk singkatnya / kecepatan.
Alex Sexton

33

Melakukannya dengan blur terlalu terbatas. Diasumsikan ada fokus pada form isian, jadi saya lebih suka melakukannya pada submit, dan memetakan melalui input. Setelah bertahun-tahun berurusan dengan trik blur mewah, fokus, dll., Menjaga hal-hal yang lebih sederhana akan menghasilkan lebih banyak kegunaan di mana ia penting.

$('#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: Tidak dapat membaca properti 'panjang' yang tidak terdefinisi
Chuck D

@ChuckD saya mendapatkan kesalahan yang sama dan aku tahu saya hilang $di if (('input:text').val().length == 0) {itu harusif ($('input:text').val().length == 0) {
fWd82

16

Anda bisa menggunakan juga ..

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

jika Anda ragu tentang spasi, maka coba ..

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

9

kenapa tidak ada yang disebutkan

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

tampaknya lebih seperti jquery bagiku


3
Ini tidak berfungsi di jQuery 1.9+ karena mereka mengubah cara kerja filter pemilih .. jsfiddle.net/6r3Rk
Sumbu

2
Saya sarankan $ (ini) .not ('[nilai]'). AddClass ('peringatan') untuk 1.9 jsfiddle.net/znZ9e
Jamie Pate

1
Saya percaya bahwa hanya menguji apakah bidang dimulai dengan atribut nilai. Itu tidak menguji nilai bidang formulir yang sebenarnya seperti yang Anda perlukan untuk validasi. jsfiddle.net/T89bS ... bidang tanpa atribut nilai akan ditampar dengan salmon terlepas jika Anda mengetikkan sesuatu di dalamnya.
Sumbu

5

Peristiwa keyup akan mendeteksi jika pengguna telah membersihkan kotak juga (yaitu backspace meningkatkan acara tetapi backspace tidak meningkatkan acara penekanan tombol di IE)

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

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

4

Pertimbangkan untuk menggunakan plugin validasi jQuery sebagai gantinya. Mungkin sedikit berlebihan untuk bidang sederhana yang diperlukan, tetapi cukup matang sehingga menangani kasus tepi yang belum Anda pikirkan (juga tidak akan ada di antara kita sampai kita menabraknya).

Anda dapat menandai bidang yang diperlukan dengan kelas "wajib", jalankan $ ('form'). Validate () dalam $ (dokumen) .ready () dan hanya itu yang diperlukan.

Bahkan di-host di Microsoft CDN juga, untuk pengiriman cepat: http://www.asp.net/ajaxlibrary/CDN.ashx


3

The :emptypseudo-selector digunakan untuk melihat apakah sebuah elemen tidak mengandung Childs, Anda harus memeriksa nilai:

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

3

Ada satu hal lagi yang mungkin ingin Anda pikirkan, Saat ini hanya dapat menambahkan kelas peringatan jika kosong, bagaimana dengan menghapus kelas lagi ketika formulir tidak kosong lagi.

seperti ini:

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

Ini adalah contoh penggunaan keyup untuk input yang dipilih. Ini menggunakan trim juga untuk memastikan bahwa urutan karakter spasi hanya tidak memicu respons yang benar. Ini adalah contoh yang dapat digunakan untuk memulai kotak pencarian atau sesuatu yang terkait dengan jenis fungsionalitas itu.

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

Periksa apakah semua bidang kosong dan tambahkan ON atau OFF di Filter_button


1

Anda dapat mencoba sesuatu seperti ini:

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

Ini hanya akan berlaku .blur()untuk input dengan nilai kosong.


Solusi yang bagus, tetapi berhati-hatilah karena ini hanya berfungsi jika input tidak kosong saat pemanggilan fungsi dan juga hanya jika nilai disimpan dalam atribut "nilai" input.
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>// :)

Anda mungkin perlu memotong spasi juga.
Raptor

0

Dengan HTML 5 kita dapat menggunakan fitur baru "wajib", tambahkan saja ke tag yang Anda inginkan seperti:

<input type='text' required>


2
Dan semua browser tidak mendukung ini ... Anda harus menambahkan cek js DAN cek
serveride

Judul pertanyaan, "Periksa apakah input kosong menggunakan jQuery"
JoshYates1980

0

Kumpulan jawaban yang hebat, ingin menambahkan bahwa Anda juga dapat melakukan ini menggunakan :placeholder-shownpemilih CSS. Sedikit lebih bersih untuk menggunakan IMO, terutama jika Anda sudah menggunakan jQ dan memiliki pengganti pada input Anda.

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

Anda juga dapat menggunakan :validdan :invalidpenyeleksi jika Anda memiliki input yang diperlukan. Anda dapat menggunakan penyeleksi ini jika Anda menggunakan atribut yang diperlukan pada input.


0

Solusi khusus CSS bersih ini adalah:

input[type="radio"]:read-only {
        pointer-events: none;
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.