Ðожно не ÑолÑко назнаÑаÑÑ Ð¾Ð±ÑабоÑÑики, но и генеÑиÑоваÑÑ ÑобÑÑÐ¸Ñ Ð¸Ð· JavaScript-кода.
ÐолÑзоваÑелÑÑкие ÑобÑÑÐ¸Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ñ Ð¿Ñи Ñоздании гÑаÑиÑеÑкиÑ
компоненÑов. ÐапÑимеÑ, коÑневой ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð½Ð°Ñего менÑ, Ñеализованного пÑи помоÑи JavaScript, Ð¼Ð¾Ð¶ÐµÑ Ð³ÐµÐ½ÐµÑиÑоваÑÑ ÑобÑÑиÑ, оÑноÑÑÑиеÑÑ Ðº ÑÑÐ¾Ð¼Ñ Ð¼ÐµÐ½Ñ: open (Ð¼ÐµÐ½Ñ ÑаÑкÑÑÑо), select (вÑбÑан пÑÐ½ÐºÑ Ð¼ÐµÐ½Ñ) и Ñ.п. РдÑÑгой код Ð¼Ð¾Ð¶ÐµÑ ÑлÑÑаÑÑ ÑÑи ÑобÑÑÐ¸Ñ Ð¸ ÑзнаваÑÑ, ÑÑо пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ñ Ð¼ÐµÐ½Ñ.
Ðожно генеÑиÑоваÑÑ Ð½Ðµ ÑолÑко ÑовеÑÑенно новÑе, пÑидÑманнÑе нами ÑобÑÑиÑ, но и вÑÑÑоеннÑе, Ñакие как click, mousedown и дÑÑгие. ÐÑо бÑÐ²Ð°ÐµÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ Ð´Ð»Ñ Ð°Ð²ÑомаÑиÑеÑкого ÑеÑÑиÑованиÑ.
ÐонÑÑÑÑкÑÐ¾Ñ Event
ÐÑÑÑоеннÑе клаÑÑÑ Ð´Ð»Ñ ÑобÑÑий ÑоÑмиÑÑÑÑ Ð¸ÐµÑаÑÑ Ð¸Ñ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñно клаÑÑам Ð´Ð»Ñ DOM-ÑлеменÑов. ÐÑ ÐºÐ¾Ñнем ÑвлÑеÑÑÑ Ð²ÑÑÑоеннÑй клаÑÑ Event.
СобÑÑие вÑÑÑоенного клаÑÑа Event можно ÑоздаÑÑ Ñак:
let event = new Event(type[, options]);
Ðде:
- type â Ñип ÑобÑÑиÑ, ÑÑÑока, напÑимеÑ
"click"или же лÑбой пÑидÑманнÑй нами â"my-event". - options â обÑÐµÐºÑ Ñ ÑÑÐµÐ¼Ñ Ð½ÐµÐ¾Ð±ÑзаÑелÑнÑми ÑвойÑÑвами:
bubbles: true/falseâ еÑлиtrue, Ñогда ÑобÑÑие вÑплÑваеÑ.cancelable: true/falseâ еÑлиtrue, Ñогда можно оÑмениÑÑ Ð´ÐµÐ¹ÑÑвие по ÑмолÑаниÑ. Ðозже Ð¼Ñ ÑазбеÑÑм, ÑÑо ÑÑо знаÑÐ¸Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑÐºÐ¸Ñ ÑобÑÑий.composed: true/falseâ еÑлиtrue, Ñогда ÑобÑÑие бÑÐ´ÐµÑ Ð²ÑплÑваÑÑ Ð½Ð°ÑÑÐ¶Ñ Ð·Ð° пÑÐµÐ´ÐµÐ»Ñ Shadow DOM. Ðозже Ð¼Ñ ÑазбеÑÑм ÑÑо в Ñазделе Ðеб-компоненÑÑ.
Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð²Ñе ÑÑи ÑвойÑÑва ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ñ Ð² false: {bubbles: false, cancelable: false, composed: false}.
ÐеÑод dispatchEvent
ÐоÑле Ñого, как обÑÐµÐºÑ ÑобÑÑÐ¸Ñ Ñоздан, Ð¼Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð·Ð°Ð¿ÑÑÑиÑÑ ÐµÐ³Ð¾ на ÑлеменÑе, вÑзвав меÑод elem.dispatchEvent(event).
ÐаÑем обÑабоÑÑики оÑÑеагиÑÑÑÑ Ð½Ð° него, как бÑдÑо ÑÑо обÑÑное бÑаÑзеÑное ÑобÑÑие. ÐÑли пÑи Ñоздании Ñказан Ñлаг bubbles, Ñо оно бÑÐ´ÐµÑ Ð²ÑплÑваÑÑ.
РпÑимеÑе ниже ÑобÑÑие click иниÑииÑÑеÑÑÑ JavaScript-кодом Ñак, как бÑдÑо кликнÑли по кнопке:
<button id="elem" onclick="alert('Ðлик!');">ÐвÑоклик</button>
<script>
let event = new Event("click");
elem.dispatchEvent(event);
</script>
Ðожно легко оÑлиÑиÑÑ Â«Ð½Ð°ÑÑоÑÑее» ÑобÑÑие Ð¾Ñ ÑгенеÑиÑованного кодом.
СвойÑÑво event.isTrusted пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð·Ð½Ð°Ñение true Ð´Ð»Ñ ÑобÑÑий, поÑождаемÑÑ
ÑеалÑнÑми дейÑÑвиÑми полÑзоваÑелÑ, и false Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑиÑÑемÑÑ
кодом.
ÐÑÐ¸Ð¼ÐµÑ Ð²ÑплÑÑиÑ
ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ ÑоздаÑÑ Ð²ÑплÑваÑÑее ÑобÑÑие Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ "hello" и поймаÑÑ ÐµÐ³Ð¾ на document.
ÐÑÑ, ÑÑо нÑжно ÑделаÑÑ â ÑÑо ÑÑÑановиÑÑ Ñлаг bubbles в true:
<h1 id="elem">ÐÑÐ¸Ð²ÐµÑ Ð¸Ð· кода!</h1>
<script>
// ловим на document...
document.addEventListener("hello", function(event) { // (1)
alert("ÐÑÐ¸Ð²ÐµÑ Ð¾Ñ " + event.target.tagName); // ÐÑÐ¸Ð²ÐµÑ Ð¾Ñ H1
});
// ...запÑÑк ÑобÑÑÐ¸Ñ Ð½Ð° ÑлеменÑе!
let event = new Event("hello", {bubbles: true}); // (2)
elem.dispatchEvent(event);
// обÑабоÑÑик на document ÑÑабоÑÐ°ÐµÑ Ð¸ вÑÐ²ÐµÐ´ÐµÑ ÑообÑение.
</script>
ÐбÑаÑиÑе внимание:
- ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸ÑполÑзоваÑÑ
addEventListenerÐ´Ð»Ñ Ð½Ð°ÑÐ¸Ñ ÑобÑÑвеннÑÑ ÑобÑÑий, Ñ.к.on<event>-ÑвойÑÑва ÑÑÑеÑÑвÑÑÑ ÑолÑко Ð´Ð»Ñ Ð²ÑÑÑоеннÑÑ ÑобÑÑий, Ñо еÑÑÑdocument.onhelloне ÑÑабоÑаеÑ. - ÐÑ Ð¾Ð±ÑÐ·Ð°Ð½Ñ Ð¿ÐµÑедаÑÑ Ñлаг
bubbles:true, инаÑе наÑе ÑобÑÑие не бÑÐ´ÐµÑ Ð²ÑплÑваÑÑ.
ÐеÑ
анизм вÑплÑÑÐ¸Ñ Ð¸Ð´ÐµÐ½ÑиÑен как Ð´Ð»Ñ Ð²ÑÑÑоенного ÑобÑÑÐ¸Ñ (click), Ñак и Ð´Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑкого ÑобÑÑÐ¸Ñ (hello). Также одинакова ÑабоÑа Ñаз вÑплÑÑÐ¸Ñ Ð¸ погÑÑжениÑ.
MouseEvent, KeyboardEvent и дÑÑгие
ÐÐ»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ ÐºÐ¾Ð½ÐºÑеÑнÑÑ Ñипов ÑобÑÑий еÑÑÑ Ñвои ÑпеÑиÑиÑеÑкие конÑÑÑÑкÑоÑÑ. ÐÐ¾Ñ Ð½ÐµÐ±Ð¾Ð»ÑÑой ÑпиÑок конÑÑÑÑкÑоÑов Ð´Ð»Ñ ÑазлиÑнÑÑ ÑобÑÑий полÑзоваÑелÑÑкого инÑеÑÑейÑа, коÑоÑÑе можно найÑи в ÑпеÑиÑикаÑии UI Event:
UIEventFocusEventMouseEventWheelEventKeyboardEvent- â¦
СÑÐ¾Ð¸Ñ Ð¸ÑполÑзоваÑÑ Ð¸Ñ
вмеÑÑо new Event, еÑли Ð¼Ñ Ñ
оÑим ÑоздаваÑÑ Ñакие ÑобÑÑиÑ. РпÑимеÑÑ, new MouseEvent("click").
СпеÑиÑиÑеÑкий конÑÑÑÑкÑÐ¾Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ ÑказаÑÑ ÑÑандаÑÑнÑе ÑвойÑÑва Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ Ñипа ÑобÑÑиÑ.
ÐапÑимеÑ, clientX/clientY Ð´Ð»Ñ ÑобÑÑÐ¸Ñ Ð¼ÑÑи:
let event = new MouseEvent("click", {
bubbles: true,
cancelable: true,
clientX: 100,
clientY: 100
});
alert(event.clientX); // 100
ÐбÑаÑиÑе внимание: ÑÑого нелÑÐ·Ñ Ð±Ñло Ð±Ñ ÑделаÑÑ Ñ Ð¾Ð±ÑÑнÑм конÑÑÑÑкÑоÑом Event.
ÐавайÑе пÑовеÑим:
let event = new Event("click", {
bubbles: true, // ÑолÑко ÑвойÑÑва bubbles и cancelable
cancelable: true, // ÑабоÑаÑÑ Ð² конÑÑÑÑкÑоÑе Event
clientX: 100,
clientY: 100
});
alert(event.clientX); // undefined, неизвеÑÑное ÑвойÑÑво пÑоигноÑиÑовано!
ÐпÑоÑем, иÑполÑзование конкÑеÑного конÑÑÑÑкÑоÑа не ÑвлÑеÑÑÑ Ð¾Ð±ÑзаÑелÑнÑм, можно обойÑиÑÑ Event, а ÑвойÑÑва запиÑаÑÑ Ð² обÑÐµÐºÑ Ð¾ÑделÑно, поÑле ÑозданиÑ, Ð²Ð¾Ñ Ñак: event.clientX=100. ÐдеÑÑ ÑÑо ÑкоÑее вопÑÐ¾Ñ ÑдобÑÑва и Ð¶ÐµÐ»Ð°Ð½Ð¸Ñ ÑледоваÑÑ Ð¿Ñавилам. СобÑÑиÑ, коÑоÑÑе генеÑиÑÑÐµÑ Ð±ÑаÑзеÑ, вÑегда имеÑÑ Ð¿ÑавилÑнÑй Ñип.
ÐолнÑй ÑпиÑок ÑвойÑÑв по Ñипам ÑобÑÑий Ð²Ñ Ð½Ð°Ð¹Ð´ÑÑе в ÑпеÑиÑикаÑии, напÑимеÑ, MouseEvent.
ÐолÑзоваÑелÑÑкие ÑобÑÑиÑ
ÐÐ»Ñ Ð³ÐµÐ½ÐµÑаÑии ÑобÑÑий ÑовеÑÑенно новÑÑ
Ñипов, ÑакиÑ
как "hello", ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ ÐºÐ¾Ð½ÑÑÑÑкÑÐ¾Ñ new CustomEvent. ТеÑ
ниÑеÑки CustomEvent абÑолÑÑно иденÑиÑен Event за иÑклÑÑением одной неболÑÑой деÑали.
У вÑоÑого аÑгÑменÑа-обÑекÑа еÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑное ÑвойÑÑво detail, в коÑоÑом можно ÑказÑваÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð´Ð»Ñ Ð¿ÐµÑедаÑи в ÑобÑÑие.
ÐапÑимеÑ:
<h1 id="elem">ÐÑÐ¸Ð²ÐµÑ Ð´Ð»Ñ ÐаÑи!</h1>
<script>
// дополниÑелÑÐ½Ð°Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¿ÑиÑ
Ð¾Ð´Ð¸Ñ Ð² обÑабоÑÑик вмеÑÑе Ñ ÑобÑÑием
elem.addEventListener("hello", function(event) {
alert(event.detail.name);
});
elem.dispatchEvent(new CustomEvent("hello", {
detail: { name: "ÐаÑÑ" }
}));
</script>
СвойÑÑво detail Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð»ÑбÑе даннÑе. Ðадо ÑказаÑÑ, ÑÑо никÑо не меÑÐ°ÐµÑ Ð¸ в обÑÑное new Event запиÑаÑÑ Ð»ÑбÑе ÑвойÑÑва. Ðо CustomEvent пÑедоÑÑавлÑÐµÑ ÑпеÑиалÑное поле detail во избежание конÑликÑов Ñ Ð´ÑÑгими ÑвойÑÑвами ÑобÑÑиÑ.
ÐÑоме Ñого, клаÑÑ ÑобÑÑÐ¸Ñ Ð¾Ð¿Ð¸ÑÑваеÑ, ÑÑо ÑÑо за ÑобÑÑие, и еÑли оно не бÑаÑзеÑное, а полÑзоваÑелÑÑкое, Ñо лÑÑÑе иÑполÑзоваÑÑ CustomEvent, ÑÑÐ¾Ð±Ñ Ñвно об ÑÑом ÑказаÑÑ.
event.preventDefault()
ÐÐ»Ñ Ð¼Ð½Ð¾Ð³Ð¸Ñ Ð±ÑаÑзеÑнÑÑ ÑобÑÑий еÑÑÑ Â«Ð´ÐµÐ¹ÑÑÐ²Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ», Ñакие как пеÑÐµÑ Ð¾Ð´ по ÑÑÑлке, вÑделение и Ñ.п.
ÐÐ»Ñ Ð½Ð¾Ð²ÑÑ , полÑзоваÑелÑÑÐºÐ¸Ñ ÑобÑÑий бÑаÑзеÑнÑÑ Ð´ÐµÐ¹ÑÑвий, конеÑно, неÑ, но код, коÑоÑÑй генеÑиÑÑÐµÑ Ñакое ÑобÑÑие, Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑедÑÑмаÑÑиваÑÑ ÐºÐ°ÐºÐ¸Ðµ-Ñо Ñвои дейÑÑÐ²Ð¸Ñ Ð¿Ð¾Ñле ÑобÑÑиÑ.
ÐÑзов event.preventDefault() ÑвлÑеÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑÑ Ð´Ð»Ñ Ð¾Ð±ÑабоÑÑика ÑобÑÑÐ¸Ñ ÑообÑиÑÑ Ð² ÑгенеÑиÑовавÑий ÑобÑÑие код, ÑÑо ÑÑи дейÑÑÐ²Ð¸Ñ Ð½Ð°Ð´Ð¾ оÑмениÑÑ.
Тогда вÑзов elem.dispatchEvent(event) возвÑаÑÐ¸Ñ false. Ркод, ÑгенеÑиÑовавÑий ÑобÑÑие, ÑзнаеÑ, ÑÑо пÑодолжаÑÑ Ð½Ðµ нÑжно.
ÐоÑмоÑÑим пÑакÑиÑеÑкий пÑÐ¸Ð¼ÐµÑ â пÑÑÑÑÑегоÑÑ ÐºÑолика (могло Ð±Ñ Ð±ÑÑÑ ÑкÑÑваÑÑееÑÑ Ð¼ÐµÐ½Ñ Ð¸Ð»Ð¸ ÑÑо-Ñо еÑÑ).
Ðиже Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе видеÑÑ ÐºÑолика #rabbit и ÑÑнкÑÐ¸Ñ hide(), коÑоÑÐ°Ñ Ð¿Ñи вÑзове генеÑиÑÑÐµÑ Ð½Ð° нÑм ÑобÑÑие "hide", ÑведомлÑÑ Ð²ÑеÑ
инÑеÑеÑÑÑÑиÑ
ÑÑ, ÑÑо кÑолик ÑобиÑаеÑÑÑ ÑпÑÑÑаÑÑÑÑ.
ÐÑбой обÑабоÑÑик Ð¼Ð¾Ð¶ÐµÑ ÑзнаÑÑ Ð¾Ð± ÑÑом, подпиÑавÑиÑÑ Ð½Ð° ÑобÑÑие hide ÑеÑез rabbit.addEventListener('hide',...) и, пÑи желании, оÑмениÑÑ Ð´ÐµÐ¹ÑÑвие по ÑмолÑÐ°Ð½Ð¸Ñ ÑеÑез event.preventDefault(). Тогда кÑолик не иÑÑезнеÑ:
<pre id="rabbit">
|\ /|
\|_|/
/. .\
=\_Y_/=
{>o<}
</pre>
<button onclick="hide()">Hide()</button>
<script>
// hide() бÑÐ´ÐµÑ Ð²Ñзван пÑи ÑелÑке на кнопке
function hide() {
let event = new CustomEvent("hide", {
cancelable: true // без ÑÑого Ñлага preventDefault не ÑÑабоÑаеÑ
});
if (!rabbit.dispatchEvent(event)) {
alert('ÐейÑÑвие оÑменено обÑабоÑÑиком');
} else {
rabbit.hidden = true;
}
}
rabbit.addEventListener('hide', function(event) {
if (confirm("ÐÑзваÑÑ preventDefault?")) {
event.preventDefault();
}
});
</script>
ÐбÑаÑиÑе внимание: ÑобÑÑие должно ÑодеÑжаÑÑ Ñлаг cancelable: true. ÐнаÑе, вÑзов event.preventDefault() бÑÐ´ÐµÑ Ð¿ÑоигноÑиÑован.
ÐложеннÑе ÑобÑÑÐ¸Ñ Ð¾Ð±ÑабаÑÑваÑÑÑÑ ÑÐ¸Ð½Ñ Ñонно
ÐбÑÑно ÑобÑÑÐ¸Ñ Ð¾Ð±ÑабаÑÑваÑÑÑÑ Ð°ÑинÑ
Ñонно. То еÑÑÑ, еÑли бÑаÑÐ·ÐµÑ Ð¾Ð±ÑабаÑÑÐ²Ð°ÐµÑ onclick и в пÑоÑеÑÑе ÑÑого пÑоизойдÑÑ Ð½Ð¾Ð²Ð¾Ðµ ÑобÑÑие, Ñо оно ждÑÑ, пока законÑиÑÑÑ Ð¾Ð±ÑабоÑка onclick.
ÐÑклÑÑением ÑвлÑеÑÑÑ ÑиÑÑаÑиÑ, когда ÑобÑÑие иниÑииÑовано из обÑабоÑÑика дÑÑгого ÑобÑÑиÑ.
Тогда ÑпÑавление ÑнаÑала пеÑÐµÑ Ð¾Ð´Ð¸Ñ Ð² обÑабоÑÑик вложенного ÑобÑÑÐ¸Ñ Ð¸ Ñже поÑле ÑÑого возвÑаÑаеÑÑÑ Ð½Ð°Ð·Ð°Ð´.
РпÑимеÑе ниже ÑобÑÑие menu-open обÑабаÑÑваеÑÑÑ ÑинÑ
Ñонно во вÑÐµÐ¼Ñ Ð¾Ð±ÑабоÑки onclick:
<button id="menu">ÐÐµÐ½Ñ (нажми менÑ)</button>
<script>
menu.onclick = function() {
alert(1);
// alert("вложенное ÑобÑÑие")
menu.dispatchEvent(new CustomEvent("menu-open", {
bubbles: true
}));
alert(2);
};
document.addEventListener('menu-open', () => alert('вложенное ÑобÑÑие'))
</script>
ÐоÑÑдок вÑвода: 1 â вложенное ÑобÑÑие â 2.
ÐбÑаÑиÑе внимание, ÑÑо вложенное ÑобÑÑие menu-open ÑÑÐ¿ÐµÐ²Ð°ÐµÑ Ð²ÑплÑÑÑ Ð¸ запÑÑÑиÑÑ Ð¾Ð±ÑабоÑÑик на document. ÐбÑабоÑка вложенного ÑобÑÑÐ¸Ñ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ Ð·Ð°Ð²ÐµÑÑаеÑÑÑ Ð´Ð¾ Ñого, как ÑпÑавление возвÑаÑаеÑÑÑ Ð²Ð¾ внеÑний код (onclick).
ÐÑо ÑпÑаведливо не ÑолÑко Ð´Ð»Ñ dispatchEvent, но и Ð´Ð»Ñ Ð´ÑÑгиÑ
ÑиÑÑаÑий. JavaScript в обÑабоÑÑике ÑобÑÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð²ÑзваÑÑ Ð´ÑÑгие меÑодÑ, коÑоÑÑе пÑиведÑÑ Ðº дÑÑгим ÑобÑÑиÑм â они Ñоже обÑабаÑÑваÑÑÑÑ ÑинÑ
Ñонно.
ÐÑли нам ÑÑо не подÑ
одиÑ, Ñо Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ либо помеÑÑиÑÑ dispatchEvent (или лÑбой дÑÑгой код, иниÑииÑÑÑÑий ÑобÑÑиÑ) в ÐºÐ¾Ð½ÐµÑ Ð¾Ð±ÑабоÑÑика onclick, либо, еÑли ÑÑо неÑдобно, можно обеÑнÑÑÑ Ð³ÐµÐ½ÐµÑаÑÐ¸Ñ ÑобÑÑÐ¸Ñ Ð² setTimeout Ñ Ð½Ñлевой задеÑжкой:
<button id="menu">ÐÐµÐ½Ñ (нажми менÑ)</button>
<script>
menu.onclick = function() {
alert(1);
// alert(2)
setTimeout(() => menu.dispatchEvent(new CustomEvent("menu-open", {
bubbles: true
})));
alert(2);
};
document.addEventListener('menu-open', () => alert('вложенное ÑобÑÑие'))
</script>
ТепеÑÑ dispatchEvent запÑÑкаеÑÑÑ Ð°ÑинÑ
Ñонно поÑле иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑекÑÑего кода, вклÑÑÐ°Ñ menu.onclick, поÑÑÐ¾Ð¼Ñ Ð¾Ð±ÑабоÑÑики полноÑÑÑÑ Ð½ÐµÐ·Ð°Ð²Ð¸ÑимÑ.
ÐовÑй поÑÑдок вÑвода: 1 â 2 â вложенное ÑобÑÑие.
ÐÑого
ЧÑÐ¾Ð±Ñ ÑгенеÑиÑоваÑÑ ÑобÑÑие из кода, внаÑале надо ÑоздаÑÑ Ð¾Ð±ÑÐµÐºÑ ÑобÑÑиÑ.
ÐазовÑй конÑÑÑÑкÑÐ¾Ñ Event(name, options) пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¾Ð±ÑзаÑелÑное Ð¸Ð¼Ñ ÑобÑÑÐ¸Ñ Ð¸ options â обÑÐµÐºÑ Ñ Ð´Ð²ÑÐ¼Ñ ÑвойÑÑвами:
bubbles: trueÑÑÐ¾Ð±Ñ ÑобÑÑие вÑплÑвало.cancelable: trueеÑли Ð¼Ñ Ñ Ð¾Ñим, ÑÑобÑevent.preventDefault()ÑабоÑал.
ÐÑобÑе конÑÑÑÑкÑоÑÑ Ð²ÑÑÑоеннÑÑ
ÑобÑÑий MouseEvent, KeyboardEvent и дÑÑгие пÑинимаÑÑ ÑпеÑиÑиÑнÑе Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ конкÑеÑного Ñипа ÑобÑÑий ÑвойÑÑва. ÐапÑимеÑ, clientX Ð´Ð»Ñ ÑобÑÑий мÑÑи.
ÐÐ»Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑкиÑ
ÑобÑÑий ÑÑÐ¾Ð¸Ñ Ð¿ÑименÑÑÑ ÐºÐ¾Ð½ÑÑÑÑкÑÐ¾Ñ CustomEvent. У него еÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑÐ½Ð°Ñ Ð¾Ð¿ÑÐ¸Ñ detail, Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾ÑоÑой можно пеÑедаваÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð² обÑекÑе ÑобÑÑиÑ. ÐоÑле Ñего вÑе обÑабоÑÑики ÑмогÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ðº ней доÑÑÑп ÑеÑез event.detail.
ÐеÑмоÑÑÑ Ð½Ð° ÑеÑ
ниÑеÑкÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð³ÐµÐ½ÐµÑиÑоваÑÑ Ð²ÑÑÑоеннÑе бÑаÑзеÑнÑе ÑобÑÑÐ¸Ñ Ñипа click или keydown, полÑзоваÑÑÑÑ ÐµÐ¹ ÑÑÐ¾Ð¸Ñ Ñ Ð±Ð¾Ð»ÑÑой оÑÑоÑожноÑÑÑÑ.
ÐеÑÑма ÑаÑÑо, когда ÑазÑабоÑÑик Ñ Ð¾ÑÐµÑ ÑгенеÑиÑоваÑÑ Ð²ÑÑÑоенное ÑобÑÑие â ÑÑо вÑзвано «кÑивой» аÑÑ Ð¸ÑекÑÑÑой кода.
Ðак пÑавило, генеÑаÑÐ¸Ñ Ð²ÑÑÑоеннÑÑ ÑобÑÑий полезна в ÑледÑÑÑÐ¸Ñ ÑлÑÑаÑÑ :
- Ðибо как ÑвнÑй и гÑÑбÑй Ñ Ð°Ðº, ÑÑÐ¾Ð±Ñ Ð·Ð°ÑÑавиÑÑ ÑабоÑаÑÑ ÑÑоÑонние библиоÑеки, в коÑоÑÑÑ Ð½Ðµ пÑедÑÑмоÑÑÐµÐ½Ñ Ð´ÑÑгие ÑÑедÑÑва взаимодейÑÑвиÑ.
- Ðибо Ð´Ð»Ñ Ð°Ð²ÑомаÑиÑеÑкого ÑеÑÑиÑованиÑ, ÑÑÐ¾Ð±Ñ ÑкÑипÑом «нажаÑÑ Ð½Ð° кнопкÑ» и поÑмоÑÑеÑÑ, пÑоизоÑло ли нÑжное дейÑÑвие.
ÐолÑзоваÑелÑÑкие ÑобÑÑÐ¸Ñ Ñо Ñвоими именами ÑаÑÑо ÑоздаÑÑ Ð´Ð»Ñ ÑлÑÑÑÐµÐ½Ð¸Ñ Ð°ÑÑ Ð¸ÑекÑÑÑÑ, ÑÑÐ¾Ð±Ñ ÑообÑиÑÑ Ð¾ Ñом, ÑÑо пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð²Ð½ÑÑÑи наÑÐ¸Ñ Ð¼ÐµÐ½Ñ, ÑлайдеÑов, каÑÑÑелей и Ñ.д.
ÐомменÑаÑии
<code>, Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑÑÑок кода — Ñег<pre>, еÑли болÑÑе 10 ÑÑÑок — ÑÑÑÐ»ÐºÑ Ð½Ð° пеÑоÑниÑÑ (plnkr, JSBin, codepenâ¦)