Rupanya orang cacat <input>
tidak ditangani oleh peristiwa apa pun
Apakah ada cara untuk mengatasi masalah ini?
<input type="text" disabled="disabled" name="test" value="test" />
$(':input').click(function () {
$(this).removeAttr('disabled');
})
Di sini, saya perlu mengklik input untuk mengaktifkannya. Tetapi jika saya tidak mengaktifkannya, input tidak boleh diposting.
javascript
jquery
html
Pierre de LESPINAY
sumber
sumber
Jawaban:
Elemen yang dinonaktifkan tidak memecat acara mouse. Sebagian besar browser akan menyebarkan acara yang berasal dari elemen yang dinonaktifkan di atas pohon DOM, sehingga penangan acara dapat ditempatkan pada elemen kontainer. Namun, Firefox tidak menunjukkan perilaku ini, ia tidak melakukan apa-apa ketika Anda mengklik elemen yang dinonaktifkan.
Saya tidak bisa memikirkan solusi yang lebih baik tetapi, untuk kompatibilitas lintas browser lengkap, Anda dapat menempatkan elemen di depan input yang dinonaktifkan dan menangkap klik pada elemen itu. Berikut ini contoh yang saya maksud:
jq:
Contoh: http://jsfiddle.net/RXqAm/170/ (diperbarui untuk menggunakan jQuery 1.7 dengan
prop
alih - alihattr
).sumber
disabled
atribut tanpa nilai, itu menyiratkan HTML daripada XHTML, dalam hal ini slash penutup tidak diperlukan.mouseenter
, Dll.)input[disabled] {pointer-events:none}
CSS Anda. Kemudian klik berperilaku seolah-olah Anda mengklik elemen induk. IMHO ini adalah solusi paling sederhana dan terbersih, tetapi sayangnya ini hanya berfungsi untuk browser yang mendukungpointer-events
properti CSS: caniuse.com/#search=pointer-eventsMungkin Anda bisa membuat bidang hanya baca dan kirim menonaktifkan semua bidang hanya baca
dan input (+ skrip) seharusnya
sumber
Elemen yang dinonaktifkan "memakan" klik di beberapa browser - mereka tidak meresponsnya, atau membiarkannya ditangkap oleh penangan acara di mana pun baik pada elemen atau salah satu wadahnya.
IMHO cara termudah dan terbersih untuk "memperbaiki" ini (jika Anda memang perlu menangkap klik pada elemen yang dinonaktifkan seperti OP) adalah hanya dengan menambahkan CSS berikut ke halaman Anda:
Ini akan membuat klik pada input yang dinonaktifkan jatuh ke elemen induk, di mana Anda dapat menangkapnya secara normal. (Jika Anda memiliki beberapa input yang dinonaktifkan, Anda mungkin ingin memasukkan masing-masing ke dalam wadah tersendiri, jika belum ditata seperti itu - tambahan
<span>
atau<div>
, katakanlah - hanya untuk memudahkan membedakan input yang dinonaktifkan mana yang diklik).Kelemahannya adalah bahwa trik ini sayangnya tidak akan berfungsi untuk browser lama yang tidak mendukung
pointer-events
properti CSS. (Ini harus bekerja dari IE 11, FF v3.6, Chrome v4): caniuse.com/#search=pointer-eventsJika Anda perlu mendukung browser lama, Anda harus menggunakan salah satu jawaban lain!
sumber
input[disabled]
juga akan mencocokkan elemen yang dinonaktifkan oleh JavaScript (element.disabled = true;
) tetapi sepertinya itu cocok. Lagi pula, saya menemukaninput:disabled
pembersih.Saya akan menyarankan alternatif - gunakan CSS:
alih-alih atribut yang dinonaktifkan. Kemudian, Anda dapat menambahkan atribut CSS Anda sendiri untuk mensimulasikan input yang dinonaktifkan, tetapi dengan kontrol lebih.
sumber
sumber
Alih-alih
disabled
, Anda bisa mempertimbangkan untuk menggunakanreadonly
. Dengan beberapa CSS tambahan, Anda dapat mendesain input sehingga tampak sepertidisabled
bidang.Sebenarnya ada masalah lain. Peristiwa
change
hanya memicu ketika elemen kehilangan fokus, yang tidak logis mempertimbangkandisabled
bidang. Mungkin Anda mendorong data ke bidang ini dari panggilan lain. Untuk membuat ini berfungsi, Anda dapat menggunakan acara 'bind'.sumber
ATAU lakukan ini dengan jQuery dan CSS!
Dengan cara ini Anda membuat elemen terlihat dinonaktifkan dan tidak ada peristiwa pointer akan menyala, namun memungkinkan propagasi dan jika dikirimkan Anda dapat menggunakan atribut 'abaikan' untuk mengabaikannya.
sumber
Kami memiliki masalah hari ini seperti ini, tetapi kami tidak ingin mengubah HTML. Jadi kami menggunakan acara mouseenter untuk mencapai itu
sumber
Saya menemukan solusi lain:
Elemen "cacat" elemen cacat dinonaktifkan dengan opacity:
Dan kemudian membatalkan acara jika elemen dinonaktifkan dan menghapus kelas:
sumber
saran di sini terlihat seperti kandidat yang baik untuk pertanyaan ini juga
Melakukan acara klik pada elemen yang dinonaktifkan? Javascript jQuery
sumber