acara 'masukan' jQuery


207

Saya belum pernah mendengar tentang suatu acara di jQuery disebut inputsampai saya melihat jsfiddle ini .

Apakah Anda tahu mengapa ini berhasil? Apakah itu alias keyupatau semacamnya?

$(document).on('input', 'input:text', function() {});


12
Kecuali changehanya kebakaran setelah lapangan kehilangan fokus. inputsegera terbakar.
jcsanyi

3
Sudahkah Anda mencoba mencarinya?
undefined

2
@undefined Ya saya punya, kalau tidak saya tidak akan membuat pertanyaan untuk itu. Satu-satunya hal yang muncul di Google adalah artikel tentang input elemen dan cara melampirkan acara ke sana.
Silkfire

3
Pertanyaan ini dengan indah menjawab semua konsep - stackoverflow.com/questions/15727324/…
GemK

Jawaban:


197

Terjadi ketika konten teks elemen diubah melalui antarmuka pengguna.

Ini bukan alias untuk keyupkarena keyupakan menyala meskipun kunci tidak melakukan apa-apa (misalnya: menekan dan kemudian melepaskan tombol Kontrol akan memicukeyup peristiwa).

Cara yang baik untuk memikirkannya adalah seperti ini: ini adalah peristiwa yang memicu setiap kali input berubah. Ini termasuk - tetapi tidak terbatas pada - menekan tombol yang mengubah input (jadi, misalnya, Ctrldengan sendirinya tidak akan memicu acara, tetapiCtrl-V untuk menempelkan beberapa teks), memilih opsi pelengkapan otomatis, tengah bergaya Linux -Klik tempel, seret-dan-jatuhkan, dan banyak hal lainnya.

Lihat halaman ini dan komentar pada jawaban ini untuk lebih jelasnya.


11
Apakah Anda tahu jika jQuery membuat dukungan browser yang hilang? (IE8, IE9 inkonsistensi, dll)
jcsanyi

4
Saya baru saja googled 'js input event'. Ada kemampuan untuk mengetahui istilah apa yang digunakan untuk menemukan apa yang Anda inginkan di google; itu datang dengan pengalaman. Dan kemudian, tentu saja, Google mencatat semuanya dan menggunakannya untuk mempelajari apa yang sebenarnya Anda inginkan. Sebagian besar pencarian saya adalah untuk dokumen API dan pertanyaan pemrograman, jadi setelah beberapa waktu saya mengetahui bahwa ketika saya mencari hal-hal itu mungkin harus menunjukkan kepada saya dokumentasi API dan jawaban pemrograman.
J David Smith

3
Yah, saya sedang mencari "acara masukan jQuery", saya tidak tahu itu adalah acara JS asli. Sama di sini, hasil pertama biasanya dari SO, yang saya anggap sebagian besar sebagai jawaban de facto / sumber informasi resmi.
Silkfire

18
inputsebenarnya lebih dari sekadar yang difilter keyup, misalnya akan diaktifkan juga ketika nilai dipilih dari daftar nilai yang sebelumnya digunakan ... Itu adalah sesuatu yang akan sangat sulit ditangani jika tidak ada inputperistiwa.
szeryf

2
oninputjuga menyala ketika teks diubah oleh mouse (baik melalui seret dan lepas, atau melalui menu klik kanan atau klik tengah untuk menempel).
Denilson Sá Maia

157

oninput Peristiwa sangat berguna untuk melacak perubahan bidang input.

Namun itu tidak didukung dalam versi IE <9. Tetapi versi IE yang lebih lama memiliki acara milik sendiri onpropertychangeyang melakukan hal yang sama seperti oninput.

Jadi Anda bisa menggunakannya dengan cara ini:

$(':input').on('input propertychange');

Untuk memiliki dukungan crossbrowser penuh.

Karena perubahan properti dapat dipicu untuk perubahan properti APAPUN, misalnya, properti yang dinonaktifkan diubah, maka Anda ingin menyertakan ini:

$(':input').on('propertychange input', function (e) {
    var valueChanged = false;

    if (e.type=='propertychange') {
        valueChanged = e.originalEvent.propertyName=='value';
    } else {
        valueChanged = true;
    }
    if (valueChanged) {
        /* Code goes here */
    }
});

10
Apa yang saya butuhkan. Terima kasih. (Saya benci harus mendukung <IE9.)
DaleyKD

Beberapa info lebih lanjut: "Opera tidak memecat suatu peristiwa input setelah menjatuhkan teks di bidang input. IE 9 tidak memecat suatu peristiwa input ketika pengguna menghapus karakter dari input yang diisi oleh keyboard, memotong, atau menyeret operasi." developer.mozilla.org/en-US/docs/Web/Events/…
tkane2000

Ada masalah dengan kode ini. Jika panjang maksimum diatur pada elemen input, peristiwa 'input' dipicu bahkan ketika panjang maks tercapai dan nilainya tidak berubah
nivcaner

Tetapi mengapa tidak hanya dua fungsi yang terpisah? Dengan begitu, tidak perlu memeriksa jenis acara atau nama properti. Kode bisa berada dalam fungsi bersama ketiga.
ADTC

17

Menggunakan jQuery, efek berikut identik:

$('a').click(function(){ doSomething(); });
$('a').on('click', function(){ doSomething(); });

inputNamun, dengan acara tersebut, hanya pola kedua yang tampaknya berfungsi di browser yang telah saya uji.

Dengan demikian, Anda berharap ini berfungsi, tetapi TIDAK (setidaknya saat ini):

$(':text').input(function(){ doSomething(); });

Sekali lagi, jika Anda ingin memanfaatkan delegasi acara (mis. Untuk menyiapkan acara #containersebelum Anda input.textditambahkan ke DOM), ini akan muncul di pikiran:

$('#container').on('input', ':text', function(){ doSomething(); });

Sayangnya, sekali lagi, ini TIDAK berfungsi saat ini!

Hanya pola ini yang berfungsi:

$(':text').on('input', function(){ doSomething(); });

DIedit DENGAN INFORMASI LEBIH LANJUT

Saya pasti dapat mengkonfirmasi bahwa pola ini:

$('#container').on('input', ':text', function(){ doSomething(); });

SEKARANG BEKERJA juga, di semua browser 'standar'.


2

Seperti yang dikatakan claustrofob, oninput didukung untuk IE9 +.

Namun , "Acara oninput bermasalah di Internet Explorer 9. Itu tidak dipecat ketika karakter dihapus dari bidang teks melalui antarmuka pengguna hanya ketika karakter dimasukkan. Meskipun acara pertukaran properti didukung di Internet Explorer 9, tetapi serupa dengan oninput acara, itu juga buggy, tidak dipecat saat dihapus.

Karena karakter dapat dihapus dengan beberapa cara (Backspace dan tombol Delete, CTRL + X, perintah Cut dan Delete dalam menu konteks), tidak ada solusi yang baik untuk mendeteksi semua perubahan. Jika karakter dihapus oleh perintah Hapus dari menu konteks, modifikasi tidak dapat dideteksi dalam JavaScript di Internet Explorer 9. "

Saya memiliki hasil yang baik yang mengikat input dan keyup (dan keydown, jika Anda ingin menjalankannya di IE sambil menahan tombol Backspace).



1

Saya pikir 'input' hanya bekerja di sini dengan cara yang sama 'oninput' dalam Model Acara DOM Level O.

Kebetulan:

Sama seperti silkfire berkomentar, saya juga mencari di Google untuk 'jQuery input event'. Jadi saya dituntun ke sini dan terkejut mengetahui bahwa 'input' adalah parameter yang dapat diterima untuk perintah bind () jquery . Dalam jQuery in Action (p. 102, 2008 ed.) 'Input' tidak disebutkan sebagai peristiwa yang mungkin terjadi (terhadap 20 lainnya, dari 'blur' hingga 'unload'). Memang benar bahwa, pada hal. 92, kebalikannya dapat diperkirakan dari membaca ulang (yaitu dari referensi ke pengidentifikasi string yang berbeda antara model Level 0 dan Level 2). Itu cukup menyesatkan.


Terima kasih atas masukannya (tidak ada permainan kata-kata), ini tampaknya menjadi utas resmi sekarang! :)
silkfire

0

jQuery memiliki tanda tangan berikut untuk .on()metode ini:.on( events [, selector ] [, data ], handler )

Acara dapat berupa siapa saja yang terdaftar di referensi ini:

https://developer.mozilla.org/en-US/docs/Web/Events

Padahal, mereka tidak semua didukung oleh setiap browser.

Mozilla menyatakan yang berikut tentang acara masukan:

Acara input DOM diaktifkan secara sinkron ketika nilai elemen atau diubah. Selain itu, ia menyala pada editor yang dapat diedit saat kontennya diubah.


-8
$("input#myId").bind('keyup', function (e) {    
    // Do Stuff
});

bekerja di IE dan chrome


bindsudah usang, gunakanon
Tushar
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.