Saya mengalami kesulitan dengan pemilih CSS khusus ini yang tidak ingin berfungsi ketika saya menambahkannya :not(:empty)
. Tampaknya berfungsi dengan baik dengan kombinasi apa pun dari penyeleksi lain:
input:not(:empty):not(:focus):invalid { border-color: #A22; box-shadow: none }
Jika saya menghapus :not(:empty)
bagian itu, itu berfungsi dengan baik. Bahkan jika saya mengubah pemilih input:not(:empty)
tetap tidak akan memilih bidang masukan yang memiliki teks yang diketik di dalamnya. Apakah ini rusak atau saya hanya tidak diizinkan untuk digunakan :empty
dalam :not()
selektor?
Satu-satunya hal lain yang dapat saya pikirkan adalah bahwa browser masih mengatakan bahwa elemen tersebut kosong karena tidak memiliki turunan, hanya sebuah "nilai" per kata. Apakah :empty
pemilih tidak memiliki fungsi terpisah untuk elemen masukan versus elemen biasa? Ini tampaknya tidak mungkin karena menggunakan :empty
di lapangan dan mengetik sesuatu ke dalamnya akan menyebabkan efek alternatif hilang (karena tidak lagi kosong).
Diuji di Firefox 8 dan Chrome.
sumber
:empty
pemilih : "Beberapa elemen lainnya, di sisi lain, kosong (yaitu tidak memiliki anak) dengan definisi:<input>
,<img>
,<br>
, dan<hr>
, misalnya.":not(:empty)
, batas merah berfungsi seperti yang diharapkan untuk input yang tidak fokus tetapi tidak valid.Jawaban:
Sebagai elemen kosong ,
<input>
elemen dianggap kosong menurut definisi HTML "kosong", karena model konten dari semua elemen kosong selalu kosong . Jadi mereka akan selalu cocok dengan:empty
pseudo-class, apakah mereka memiliki nilai atau tidak. Ini juga mengapa nilainya diwakili oleh atribut di tag awal, bukan konten teks dalam tag awal dan akhir.Juga, dari spesifikasi Selectors :
Akibatnya,
input:not(:empty)
tidak akan pernah cocok dengan apapun dalam dokumen HTML yang benar. (Ini masih akan berfungsi dalam dokumen XML hipotetis yang mendefinisikan<input>
elemen yang dapat menerima teks atau elemen turunan.)Saya tidak berpikir Anda dapat memberi gaya
<input>
bidang kosong secara dinamis hanya dengan menggunakan CSS (yaitu aturan yang berlaku setiap kali bidang kosong, dan jangan sekali teks dimasukkan). Anda dapat memilih bidang yang awalnya kosong jika mereka memilikivalue
atribut kosong (input[value=""]
) atau tidak memiliki atribut sama sekali (input:not([value])
), tapi itu saja.sumber
input:empty
. Mungkin saya mengetik sesuatu yang salah, siapa tahu.input
elemen dapat diberi gaya secara dinamis (di browser yang cukup modern) jika Anda dapat menggunakanrequired
atribut dalam markup HTML. Kemudian Anda dapat menggunakan:valid
dan:invalid
di CSS untuk menguji nilai kontrol yang tidak kosong vs. kosong. Lihat stackoverflow.com/questions/16952526/…Dimungkinkan dengan javascript sebaris
onkeyup="this.setAttribute('value', this.value);"
&input:not([value=""]):not(:focus):invalid
Demo: http://jsfiddle.net/mhsyfvv9/
sumber
onchange
acara ini lebih baik dalam kasus ini? Karena Anda dapat mengedit nilai input denganRight click > Cut
juga (misalnya). Mengujinya: berfungsi dengan baik.Anda dapat mencoba menggunakan: placeholder-ditampilkan ...
tidak ada dukungan yang bagus ... caniuse
sumber
sumber
Anda mungkin melakukan pendekatan ini secara berbeda; hilangkan penggunaan
:empty
pseudo-class dan manfaatkaninput
peristiwa untuk mendeteksi nilai yang signifikan di<input>
bidang dan berikan gaya yang sesuai:Terkait
input
Peristiwa ( Peristiwa Mutasi DOM sekarang sudah tidak digunakan lagi di level DOM 4, dan telah digantikan oleh Pengamat Mutasi DOM).Penafian: perhatikan bahwa
input
peristiwa saat ini bersifat eksperimental , dan mungkin tidak didukung secara luas.sumber
Karena placeholder menghilang saat input, Anda dapat menggunakan:
sumber
solusi css murni
sumber
Solusi CSS murni lainnya
sumber
Ini harus berfungsi di browser modern:
Ini memilih semua input dengan atribut nilai dan kemudian memilih input dengan nilai yang tidak kosong di antara mereka.
sumber
value=""
. Mengetik / menghapus sesuatu di kotak tidak akan menyebabkan perubahan apa pun.Ini berfungsi karena kami memilih input hanya ketika tidak ada string kosong.
sumber
sumber