Bagaimana cara mengidentifikasi kotak teks kosong menggunakan jQuery? Saya ingin melakukannya dengan menggunakan selektor jika memungkinkan. Juga, saya harus memilih id karena dalam kode sebenarnya di mana saya ingin menggunakan ini, saya tidak ingin memilih semua input teks.
Dalam dua contoh kode berikut, yang pertama secara akurat menampilkan nilai yang diketikkan ke dalam kotak teks "txt2" oleh pengguna. Contoh kedua mengidentifikasi bahwa ada kotak teks kosong, tetapi jika Anda mengisinya di dalamnya masih dianggap kosong. Kenapa ini?
Bisakah ini dilakukan hanya dengan menggunakan selektor?
Kode ini melaporkan nilai di kotak teks "txt2":
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
$('#cmdSubmit').click(function() {
alert($('[id=txt2]').val());
});
});
</script>
</head>
<body>
<form>
<input type="text" name="txt1" id="txt1" value="123" /><br />
<input type="text" name="txt2" id="txt2" value="" /><br />
<input type="text" name="txt3" id="txt3" value="abc" /><br />
<input type="submit" name="cmdSubmit" id='cmdSubmit' value="Send" /><br />
</form>
</body>
</html>
Kode ini selalu melaporkan kotak teks "txt2" sebagai kosong:
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
$('#cmdSubmit').click(function() {
if($('[id^=txt][value=""]').length > 0) {
if (!confirm("Are you sure you want to submit empty fields?")) {
if (event.preventDefault) {
event.preventDefault();
} else {
event.returnValue = false;
}
}
}
});
});
</script>
</head>
<body>
<form>
<input type="text" name="txt1" id="txt1" value="123" /><br />
<input type="text" name="txt2" id="txt2" value="" /><br />
<input type="text" name="txt3" id="txt3" value="abc" /><br />
<input type="submit" name="cmdSubmit" id='cmdSubmit' value="Send" /><br />
</form>
</body>
</html>
jquery
css-selectors
Salib
sumber
sumber
Jawaban:
Cara lain
atau
atau
Bekerja Demo
kode dari demo
jQuery
sumber
$('input:text').filter(function() { return $(this).val().trim() == ""; });
[value=""]
pemilih tidak berfungsi karena tidak menemukan atribut nilai. Namun teknik .filter berfungsi dalam skenario ini.Anda juga dapat melakukannya dengan menentukan pemilih Anda sendiri:
Dan kemudian akses mereka seperti ini:
sumber
?
Omong-omong, panggilan Anda untuk:
dapat sangat disederhanakan dan dipercepat dengan:
sumber
Seperti yang disebutkan di postingan peringkat teratas, berikut ini bekerja dengan mesin Sizzle.
Dalam komentar, tercatat bahwa menghapus
:text
bagian dari selector menyebabkan selector gagal. Saya yakin apa yang terjadi adalah Sizzle sebenarnya mengandalkan mesin pemilih bawaan browser jika memungkinkan. Saat:text
ditambahkan ke selektor, itu menjadi pemilih CSS non-standar dan karenanya harus ditangani oleh Sizzle itu sendiri. Ini berarti Sizzle memeriksa nilai INPUT saat ini, bukan atribut "nilai" yang ditentukan dalam HTML sumber.Jadi ini adalah cara cerdas untuk memeriksa bidang teks kosong, tetapi saya pikir ini bergantung pada perilaku khusus untuk mesin Sizzle (yaitu menggunakan nilai INPUT saat ini daripada atribut yang ditentukan dalam kode sumber). Sementara Sizzle mungkin mengembalikan elemen yang cocok dengan pemilih ini,
document.querySelectorAll
hanya akan mengembalikan elemen yang adavalue=""
di HTML. Caveat emptor.sumber
$("input[type=text][value=]")
Setelah mencoba banyak versi, saya menemukan ini yang paling logis.
Perhatikan bahwa
text
peka huruf besar / kecil.sumber
Berdasarkan jawaban @James Wiseman, saya menggunakan ini:
Ini akan menangkap input yang hanya berisi whitespace selain yang 'benar-benar' kosong.
Contoh: http://jsfiddle.net/e9btdbyn/
sumber
Saya akan merekomendasikan:
sumber
<input value="">
akan tetap cocok.{{Form::text('first_name', Input::old('first_name'), array('class' => 'form-control', 'required'))}}
) karena Laravel tidak menambahkan atribut 'nilai' jika kosong. Jadi saya kemudian menggunakan:$('input:text:not([value]):visible:enabled:first');
untuk menemukan bidang input teks aktif pertama yang terlihat kosong.Ada banyak jawaban di sini yang menyarankan sesuatu seperti itu,
[value=""]
tetapi menurut saya itu tidak benar-benar berfungsi. . . atau setidaknya, penggunaannya tidak konsisten. Saya mencoba melakukan sesuatu yang serupa, memilih semua input dengan id yang dimulai dengan string tertentu yang juga tidak memiliki nilai yang dimasukkan. Saya mencoba ini:tapi tidak berhasil. Juga tidak membalikkan mereka. Lihat biola ini . Satu-satunya cara yang saya temukan untuk memilih dengan benar semua input dengan id yang dimulai dengan string dan tanpa nilai yang dimasukkan adalah
dan
tapi jelas, negatif ganda membuatnya sangat membingungkan. Mungkin, jawaban pertama Russ Cam (dengan fungsi pemfilteran) adalah metode yang paling jelas.
sumber
Ini akan memilih input teks kosong dengan id yang dimulai dengan "txt":
sumber
Karena membuat objek JQuery untuk setiap perbandingan tidak efisien, gunakan saja:
Kemudian Anda dapat melakukan:
sumber