Mari kita bahas berbagai event yang menyertai pembaruan data.
Event: change
Event change
terpicu saat elemen selesai diubah.
Untuk input teks, itu berarti bahwa event terjadi ketika kehilangan fokus.
Misalnya, saat kita mengetik di field teks di bawah – tidak ada event. Tetapi ketika kita memindahkan fokus ke tempat lain, misalnya, klik tombol – akan ada event change
:
<input type="text" onchange="alert(this.value)">
<input type="button" value="Button">
Untuk elemen lain: select
, input type=checkbox/radio
yang dipicu tepat setelah pilihan berubah:
<select onchange="alert(this.value)">
<option value="">Select something</option>
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
</select>
Event: input
Event input
terpicu setiap kali nilai telah diubah oleh pengguna.
Tidak seperti event keyboard, event input
memicu perubahan value apa pun, bahkan yang tidak melibatkan tindakan keyboard: menempelkan dengan mouse atau menggunakan pengenalan suara untuk mendikte teks.
Contohnya:
<input type="text" id="input"> oninput: <span id="result"></span>
<script>
input.oninput = function() {
result.innerHTML = input.value;
};
</script>
Jika kita ingin menangani setiap modifikasi <input>
maka event ini adalah pilihan terbaik.
Di sisi lain, event input
tidak dipicu pada input keyboard dan tindakan lain yang tidak melibatkan perubahan nilai, misalnya menekan tombol panah ⇦ ⇨ saat memasukkan.
oninput
Event input
terjadi setelah nilai diubah.
Jadi kita tidak bisa menggunakan event.preventDefault()
disana – terlalu terlambat, tidak akan ada efeknya.
Events: cut, copy, paste
Event ini terjadi saat memotong/menyalin/menempelkan nilai.
Mereka termasuk dalam kelas ClipboardEvent dan menyediakan akses ke data yang disalin/ditempel.
Kita juga bisa menggunakan event.preventDefault()
untuk membatalkan aksi, maka tidak akan ada yang disalin/ditempel.
Contohnya, kode di bawah ini mencegah semua event tersebut dan menunjukkan apa yang kita coba potong/salin/tempel:
<input type="text" id="input">
<script>
input.oncut = input.oncopy = input.onpaste = function(event) {
alert(event.type + ' - ' + event.clipboardData.getData('text/plain'));
return false;
};
</script>
Harap dicatat, bahwa memungkinkan untuk salin/tempel tidak hanya teks, tetapi semuanya. Misalnya, kita dapat menyalin file di manajer file OS, dan menempelkannya.
Itu karena clipboardData
mengimplementasikan interface DataTransfer
, yang biasa digunakan untuk drag’n’drop dan salin/tempel. Ini sedikit di luar jangkauan kita sekarang, tetapi Anda dapat menemukan metodenya dalam spesifikasi ini.
Clipboard adalah hal “global” tingkat OS. Jadi sebagian besar peramban mengizinkan akses baca/tulis ke clipboard hanya dalam lingkup tindakan pengguna tertentu untuk keamanan, misalnya di event handler onclick
.
Juga dilarang untuk membuat event clipboard “custom” dengan dispatchEvent
di semua peramban kecuali Firefox.
Ringkasan
Event perubahan data:
Event | Deskripsi | Specials |
---|---|---|
change |
Sebuah value diubah. | Untuk pemicu input teks pada saat kehilangan fokus. |
input |
Untuk input teks pada setiap perubahan. | Pemicu langsung tidak seperti change . |
cut/copy/paste |
Tindakan potong/salin/tempel. | Tindakan tersebut dapat dicegah. Properti event.clipboardData memberikan akses baca/tulis ke clipboard. |
komentar
<code>
, untuk beberapa baris – bungkus dengan tag<pre>
, untuk lebih dari 10 baris – gunakan sandbox (plnkr, jsbin, < a href='http://codepen.io'>codepen…)