Ma’lumot yangilanishlari bilan birga keladigan turli hodisalarni ko’rib chiqamiz.
Hodisa: change
change
hodisasi element o’zgarishni tugatganda ishga tushadi.
Matn inputlari uchun bu hodisaning fokusni yo’qotganda sodir bo’lishini anglatadi.
Masalan, quyidagi matn maydonida yozayotganimizda – hodisa bo’lmaydi. Lekin fokusni boshqa joyga, masalan tugmaga bosganimizda – change
hodisasi bo’ladi:
<input type="text" onchange="alert(this.value)">
<input type="button" value="Tugma">
Boshqa elementlar uchun: select
, input type=checkbox/radio
tanlash o’zgarishidan keyin darhol ishga tushadi:
<select onchange="alert(this.value)">
<option value="">Biror narsani tanlang</option>
<option value="1">1-variant</option>
<option value="2">2-variant</option>
<option value="3">3-variant</option>
</select>
Hodisa: input
input
hodisasi foydalanuvchi tomonidan qiymat o’zgartirilgandan keyin har safar ishga tushadi.
Klaviatura hodisalaridan farqli o’laroq, u har qanday qiymat o’zgarishida, hatto klaviatura harakatlarini o’z ichiga olmaganlarida ham ishga tushadi: sichqoncha bilan joylashtirish yoki matnni aytish uchun nutqni tanish texnologiyasidan foydalanish.
Masalan:
<input type="text" id="input"> oninput: <span id="result"></span>
<script>
input.oninput = function() {
result.innerHTML = input.value;
};
</script>
Agar biz <input>
ning har bir o’zgarishini qayta ishlamoqchi bo’lsak, bu hodisa eng yaxshi tanlovdir.
Boshqa tomondan, input
hodisasi klaviatura kiritish va qiymat o’zgarishini o’z ichiga olmaydigan boshqa harakatlarda, masalan inputda bo’lganida o’q tugmalarini ⇦ ⇨ bosganda ishga tushmaydi.
oninput
da hech narsaning oldini ololmaymizinput
hodisasi qiymat o’zgartirilgandan keyin sodir bo’ladi.
Shuning uchun biz u yerda event.preventDefault()
dan foydalana olmaymiz – bu juda kech, hech qanday ta’sir bo’lmaydi.
Hodisalar: cut, copy, paste
Bu hodisalar qiymatni kesish/nusxalash/joylashtirish paytida sodir bo’ladi.
Ular ClipboardEvent sinfiga tegishli va nusxalangan/joylashtirilgan ma’lumotlarga kirish imkonini beradi.
Harakatni bekor qilish uchun event.preventDefault()
dan ham foydalanishimiz mumkin, shunda hech narsa nusxalanmaydi/joylanmaydi.
Masalan, quyidagi kod barcha bunday hodisalarning oldini oladi va biz nima kesishga/nusxalashga/joylashtirshga harakat qilayotganimizni ko’rsatadi:
<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>
Diqqat qiling, nafaqat matn, balki hamma narsani nusxalash/joylashtirish mumkin. Masalan, biz OS fayl menejerida faylni nusxalashimiz va uni joylashtirshimiz mumkin.
Buning sababi clipboardData
odatda drag’n’drop va nusxalash/joylashtirish uchun ishlatiladigan DataTransfer
interfeysini amalga oshiradi. Bu hozir bizning qamrov doiramizdan biroz tashqarida, lekin siz uning metodlarini spetsifikatsiyada topishingiz mumkin.
Clipboard “global” OS darajasidagi narsa. Shuning uchun ko’pgina brauzerlar xavfsizlik uchun clipboard ga o’qish/yozish kirishiga faqat ma’lum foydalanuvchi harakatlari doirasida ruxsat beradi, masalan onclick
hodisa ishlov beruvchilarida.
Shuningdek, Firefox bundan mustasno barcha brauzerlarda dispatchEvent
bilan “maxsus” clipboard hodisalarini yaratish taqiqlangan.
Xulosa
Ma’lumot o’zgarishi hodisalari:
Hodisa | Tavsif | Xususiyatlar |
---|---|---|
change |
Qiymat o’zgartirildi. | Matn inputlari uchun fokus yo’qotilganda ishga tushadi. |
input |
Matn inputlari uchun har o’zgarishda. | change dan farqli o’laroq darhol ishga tushadi. |
cut/copy/paste |
Kesish/nusxalash/joylashtirish harakatlari. | Harakatning oldini olish mumkin. event.clipboardData xossasi clipboard ga o’qish/yozish kirishini beradi. |
Izohlar
<code>
yorlig'ini ishlating, bir nechta satrlar uchun - ularni<pre>
yorlig'i bilan o'rab qo'ying, 10 satrdan ortiq bo'lsa - sandbox (plnkr, jsbin, codepen…)