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?

Keith Donegan
sumber

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

meder omuraliev
sumber
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.

Alex Sexton
sumber
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..    
});
drewdeal
sumber
20
if ($('input:text').val().length == 0) {
      $(this).parents('p').addClass('warning');
}
Graviton
sumber
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');
    }
});
Zigri2612
sumber
9

kenapa tidak ada yang disebutkan

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

tampaknya lebih seperti jquery bagiku

Jamie Pate
sumber
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');
}});
Ouss Ama
sumber
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

Dave Ward
sumber
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');
     }
});
CMS
sumber
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');
    }
});
xorinzor
sumber
3

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

Vanila
sumber
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
    }
}
Frankie Loscavio
sumber
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

Mauro
sumber
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.

Konstantine Kalbazov
sumber
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>// :)
Maher
sumber
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>

Atlantiz
sumber
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.

Mark Carpenter Jr
sumber
0

Solusi khusus CSS bersih ini adalah:

input[type="radio"]:read-only {
        pointer-events: none;
}
Dion
sumber