Bagaimana cara saya secara terprogram memaksakan acara onchange pada input?
Saya sudah mencoba sesuatu seperti ini:
var code = ele.getAttribute('onchange');
eval(code);
Tetapi tujuan akhir saya adalah mengaktifkan fungsi pendengar apa pun, dan itu sepertinya tidak berhasil. Juga tidak hanya memperbarui atribut 'nilai'.
javascript
Soldarnal
sumber
sumber
var evt = document.createEvent('CustomEvent'); evt.initCustomEvent('input', true, false, { }); elem.dispatchEvent(evt);
Di jQuery saya kebanyakan menggunakan:
sumber
ugh jangan gunakan eval untuk apa pun . Memang ada hal-hal tertentu, tetapi itu sangat jarang. Sebaliknya, Anda akan melakukan ini:
Lihat di sini untuk opsi lainnya: http://jehiah.cz/archive/firing-javascript-events-properly
sumber
new Event(...)
dandispatchEvent
merupakan solusi yang tepat saat ini, tampaknya.Element.addEventListener
menangani acara. Untuk mencapainya dengan cara modern, lihat jawaban @ Miscreant.Untuk beberapa alasan ele.onchange () adalah melemparkan "metode tidak ditemukan" expception untuk saya di IE pada halaman saya, jadi saya akhirnya menggunakan fungsi ini dari link Kolten disediakan dan memanggil fireEvent (ele, 'perubahan'), yang bekerja :
Namun saya melakukannya, membuat halaman pengujian yang mengonfirmasi bahwa panggilan harus onchange () berfungsi:
Sunting: Alasan ele.onchange () tidak berfungsi adalah karena saya belum benar-benar menyatakan apa pun untuk acara onchange. Tapi fireEvent masih berfungsi.
sumber
element.dispatchEvent(new Event('change', true, true))
alih - alih semua yang misterius dan sebagian besar usangcreateEvent
daninitEvent
semacamnya.Ini adalah jawaban paling benar untuk IE dan Chrome ::
sumber
Diambil dari bagian bawah QUnit
Anda dapat, tentu saja, mengganti barang $ .browser ke metode deteksi browser Anda sendiri untuk membuatnya independen jQuery.
Untuk menggunakan fungsi ini:
Ini pada dasarnya akan mengaktifkan peristiwa DOM asli seolah-olah ada sesuatu yang benar-benar berubah.
sumber
Jika Anda menambahkan semua acara Anda dengan cuplikan kode ini:
maka Anda dapat menggunakan di
element.on<EVENTNAME>()
mana<EVENTNAME>
nama acara Anda, dan itu akan memanggil semua acara dengan<EVENTNAME>
sumber
Untuk memicu acara apa pun di Javascript.
sumber
jika Anda menggunakan jQuery, Anda akan memiliki:
atau MS AJAX:
Atau dalam HTML mentah elemen:
Setelah membaca ulang pertanyaan itu, saya pikir saya salah membaca apa yang harus dilakukan. Saya tidak pernah menemukan cara untuk memperbarui elemen DOM dengan cara yang akan memaksa peristiwa perubahan, hal terbaik yang Anda lakukan adalah memiliki metode penanganan peristiwa terpisah, seperti ini:
Karena Anda sudah menulis metode JavaScript yang akan melakukan perubahan, hanya ada 1 baris tambahan untuk dipanggil.
Atau, jika Anda sedang menggunakan kerangka Microsoft AJAX Anda dapat mengakses semua event handler melalui:
Ini akan memungkinkan Anda melakukan beberapa cara kerja gaya refleksi untuk menemukan penangan kejadian yang tepat untuk diaktifkan.
sumber
Menggunakan JQuery, Anda dapat melakukan hal berikut:
sumber