ÐагаÑо подÑй авÑомаÑиÑно пÑизводÑÑÑ Ð´Ð¾ Ð¿ÐµÐ²Ð½Ð¸Ñ Ð´Ñй, ÑÐºÑ Ð²Ð¸ÐºÐ¾Ð½ÑÑ Ð±ÑаÑзеÑ.
ÐапÑиклад:
- ÐлÑк на поÑÐ¸Ð»Ð°Ð½Ð½Ñ ÑнÑÑÑÑÑ Ð½Ð°Ð²ÑгаÑÑÑ Ð´Ð¾ його URL-адÑеÑи.
- ÐлÑк на ÐºÐ½Ð¾Ð¿ÐºÑ Ð²ÑдпÑавки ÑоÑми ÑнÑÑÑÑÑ ÑÑ Ð²ÑдпÑÐ°Ð²ÐºÑ Ð½Ð° ÑеÑвеÑ.
- ÐаÑиÑÐºÐ°Ð½Ð½Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸ миÑÑ Ð½Ð° ÑекÑÑÑ Ñ Ð¿ÐµÑемÑÑÐµÐ½Ð½Ñ ÐºÑÑÑоÑÑ â видÑлÑÑ ÑекÑÑ.
ЯкÑо ми обÑоблÑÑмо подÑÑ Ð² JavaScript, ми можемо не Ð·Ð°Ñ Ð¾ÑÑÑи, Ñоб вÑдбÑлаÑÑ Ñипова дÑÑ Ð±ÑаÑзеÑа, Ñ Ð·Ð°Ð¼ÑÑÑÑ ÑÑого Ð·Ð°Ñ Ð¾Ñемо ÑеалÑзÑваÑи ÑнÑÑ Ð¿Ð¾Ð²ÐµÐ´ÑнкÑ.
ÐапобÑÐ³Ð°Ð½Ð½Ñ Ð´ÑÑ Ð±ÑаÑзеÑа
Рдва ÑпоÑоби запобÑгÑи дÑÑм бÑаÑзеÑа:
- ÐÑновний ÑпоÑÑб â Ñе викоÑиÑÑовÑваÑи обâÑкÑ
event. ÐÑнÑÑ Ð¼ÐµÑодevent.preventDefault(). - ЯкÑо обÑобник пÑизнаÑено за допомогоÑ
on<event>(а неaddEventListener), повеÑненнÑfalseÑпÑаÑÑÑ Ñак Ñамо.
У ÑÑÐ¾Ð¼Ñ HTML пÑÑÐ»Ñ ÐºÐ»ÑÐºÑ Ð½Ð° поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð°Ð²ÑгаÑÑÑ Ð½Ðµ вÑдбÑваÑÑÑÑÑ, бÑаÑÐ·ÐµÑ Ð½ÑÑого не ÑобиÑÑ:
<a href="/" onclick="return false">ÐлÑкнÑÑÑ ÑÑÑ</a>
Ñи
<a href="/" onclick="event.preventDefault()">ÑÑÑ</a>
У наÑÑÑÐ¿Ð½Ð¾Ð¼Ñ Ð¿ÑÐ¸ÐºÐ»Ð°Ð´Ñ Ð¼Ð¸ викоÑиÑÑаÑмо ÑÑ ÑÐµÑ Ð½ÑÐºÑ Ð´Ð»Ñ ÑÑвоÑÐµÐ½Ð½Ñ Ð¼ÐµÐ½Ñ Ð½Ð° оÑÐ½Ð¾Ð²Ñ JavaScript.
false з обÑобника Ñ Ð²Ð¸Ð½ÑÑкомÐнаÑеннÑ, Ñке повеÑÑÐ°Ñ Ð¾Ð±Ñобник подÑÑ, зазвиÑай ÑгноÑÑÑÑÑÑÑ.
Ðдиним винÑÑком Ñ return false з обÑобника, пÑизнаÑеного за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ on<event>.
У вÑÑÑ
ÑнÑиÑ
випадкаÑ
знаÑÐµÐ½Ð½Ñ return ÑгноÑÑÑÑÑÑÑ. ÐокÑема, Ð½ÐµÐ¼Ð°Ñ ÑенÑÑ Ð¿Ð¾Ð²ÐµÑÑаÑи true.
ÐÑиклад: менÑ
РозглÑнемо Ñаке Ð¼ÐµÐ½Ñ ÑайÑÑ:
<ul id="menu" class="menu">
<li><a href="/html">HTML</a></li>
<li><a href="/javascript">JavaScript</a></li>
<li><a href="/css">CSS</a></li>
</ul>
ÐÑÑ Ñак Ñе може виглÑдаÑи в певними CSS-пÑавилами:
ÐÑнкÑи Ð¼ÐµÐ½Ñ ÑеалÑÐ·Ð¾Ð²Ð°Ð½Ñ Ñк HTML-поÑÐ¸Ð»Ð°Ð½Ð½Ñ <a>, а не кнопки <button>. ÐÐ»Ñ ÑÑого Ñ ÐºÑлÑка пÑиÑин, напÑиклад:
- ÐагаÑо лÑдей лÑблÑÑÑ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑваÑи âклÑк пÑÐ°Ð²Ð¾Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¾Ñ Ð¼Ð¸ÑÑâ Ñк âвÑдкÑиÑи в Ð½Ð¾Ð²Ð¾Ð¼Ñ Ð²ÑкнÑâ. ЯкÑо ми викоÑиÑÑаÑмо
<button>або<span>, Ñе не ÑпÑаÑÑÑ. - ÐÑд ÑÐ°Ñ ÑндекÑаÑÑÑ Ð¿Ð¾ÑÑÐºÐ¾Ð²Ñ ÑиÑÑеми пеÑеÑ
одÑÑÑ Ð·Ð° поÑиланнÑми
<a href="...">.
Ð¢Ð¾Ð¼Ñ Ð¼Ð¸ викоÑиÑÑовÑÑмо <a> Ñ ÑозмÑÑÑÑ. Ðле зазвиÑай ми маÑмо намÑÑ Ð¾Ð±ÑоблÑÑи клÑки в JavaScript. Ð¢Ð¾Ð¼Ñ Ð¼Ð¸ Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ð·Ð°Ð¿Ð¾Ð±ÑгаÑи Ñиповим дÑÑм бÑаÑзеÑа.
Як ÑÑÑ:
menu.onclick = function(event) {
if (event.target.nodeName != 'A') return;
let href = event.target.getAttribute('href');
alert( href ); // ...може бÑÑи заванÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð· ÑеÑвеÑа, генеÑаÑÑÑ ÑнÑеÑÑейÑÑ ÐºÐ¾ÑиÑÑÑваÑа ÑоÑо
return false; // запобÑÐ³Ð°Ð½Ð½Ñ Ð´ÑÑм бÑаÑзеÑа (пеÑеÑ
Ñд за URL-адÑеÑÐ¾Ñ Ð½Ðµ вÑдбÑдеÑÑÑÑ)
};
ЯкÑо ми опÑÑÑимо return false, Ñо пÑÑÐ»Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð½Ð°Ñого ÐºÐ¾Ð´Ñ Ð±ÑаÑÐ·ÐµÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ ÑÐ²Ð¾Ñ âÑÐ¸Ð¿Ð¾Ð²Ñ Ð´ÑÑâ â пеÑеÑ
Ñд до URL-адÑеÑи в href. ТÑÑ Ð½Ð°Ð¼ Ñе не поÑÑÑбно, оÑкÑлÑки ми ÑÐ°Ð¼Ñ Ð¾Ð±ÑоблÑÑмо клÑк.
Ðо ÑеÑÑ, викоÑиÑÑÐ°Ð½Ð½Ñ ÑÑÑ Ð´ÐµÐ»ÐµÐ³ÑÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð´Ñй ÑобиÑÑ Ð½Ð°Ñе Ð¼ÐµÐ½Ñ Ð´Ñже гнÑÑким. Ðи можемо додаваÑи Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ñ ÑпиÑки Ñа ÑÑилÑзÑваÑи ÑÑ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ CSS.
ÐÐµÐ²Ð½Ñ Ð¿Ð¾Ð´ÑÑ Ð¿ÐµÑеÑÑкаÑÑÑ Ð¾Ð´Ð½Ð° в ÑнÑÑ. ЯкÑо запобÑгÑи пеÑÑÑй подÑÑ, Ñо не бÑде Ñ Ð´ÑÑгоÑ.
ÐапÑиклад, mousedown на Ð¿Ð¾Ð»Ñ <input> пÑизводиÑÑ Ð´Ð¾ ÑокÑÑÑÐ²Ð°Ð½Ð½Ñ Ð² нÑÐ¾Ð¼Ñ Ñа подÑÑ focus. ЯкÑо ми запобÑжимо подÑÑ mousedown, ÑокÑÑ Ð½Ðµ вÑдбÑдеÑÑÑÑ.
СпÑобÑйÑе клÑкнÑÑи на пеÑÑÐ¾Ð¼Ñ <input> нижÑе â вÑдбÑваÑÑÑÑÑ Ð¿Ð¾Ð´ÑÑ focus. Ðле ÑкÑо наÑиÑнÑÑи дÑÑгий, ÑокÑÑа не бÑде.
<input value="ФокÑÑ Ð¿ÑаÑÑÑ" onfocus="this.value=''">
<input onmousedown="return false" onfocus="this.value=''" value="ÐлÑкни на мене">
Це ÑомÑ, Ñо дÑÑ Ð±ÑаÑзеÑа ÑкаÑовÑÑÑÑÑÑ Ð¿Ñд ÑÐ°Ñ mousedown. ФокÑÑÑÐ²Ð°Ð½Ð½Ñ Ð²Ñе Ñе можливе, ÑкÑо ми викоÑиÑÑаÑмо ÑнÑий ÑпоÑÑб Ð²Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð²Ñ
ÑдниÑ
даниÑ
. ÐапÑиклад, клавÑÑа Tab Ð´Ð»Ñ Ð¿ÐµÑÐµÐ¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð· 1-го вÑ
Ð¾Ð´Ñ Ð½Ð° 2-й. Ðле вже не за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ ÐºÐ»ÑкÑ.
ÐпÑÑÑ Â«Ð¿Ð°Ñивного» обÑобника
ÐеобовâÑзковий паÑамеÑÑ passive: true Ð´Ð»Ñ addEventListener ÑигналÑзÑÑ Ð±ÑаÑзеÑÑ, Ñо обÑобник не збиÑаÑÑÑÑÑ Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ñи preventDefault().
Ð§Ð¾Ð¼Ñ Ñе може знадобиÑиÑÑ?
Ðа мобÑлÑниÑ
пÑиÑÑÑоÑÑ
Ñ Ð´ÐµÑÐºÑ Ð¿Ð¾Ð´ÑÑ, напÑиклад touchmove (коли коÑиÑÑÑÐ²Ð°Ñ Ð¿ÐµÑемÑÑÑÑ Ð¿Ð°Ð»ÐµÑÑ Ð¿Ð¾ екÑанÑ), ÑÐºÑ Ñипово викликаÑÑÑ Ð¿ÑокÑÑÑÑваннÑ, але ÑÑÐ¾Ð¼Ñ Ð¿ÑокÑÑÑÑÐ²Ð°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ð½Ð° запобÑгÑи за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ preventDefault() в обÑобникÑ.
ТомÑ, коли бÑаÑÐ·ÐµÑ Ð²Ð¸ÑвлÑÑ ÑÐ°ÐºÑ Ð¿Ð¾Ð´ÑÑ, вÑн повинен ÑпоÑаÑÐºÑ Ð¾Ð¿ÑаÑÑваÑи вÑÑ Ð¾Ð±Ñобники, а поÑÑм, ÑкÑо preventDefault нÑде не викликано, вÑн може пÑодовжиÑи пÑокÑÑÑÑваннÑ. Це може пÑизвеÑÑи до непоÑÑÑбниÑ
заÑÑимок Ñа мигоÑÑÐ½Ð½Ñ Ð² ÑнÑеÑÑейÑÑ ÐºÐ¾ÑиÑÑÑваÑа.
ÐаÑамеÑÑ passive: true повÑдомлÑÑ Ð±ÑаÑзеÑÑ, Ñо обÑобник не збиÑаÑÑÑÑÑ ÑкаÑовÑваÑи пÑокÑÑÑÑваннÑ. Ð¢Ð¾Ð´Ñ Ð±ÑаÑÐ·ÐµÑ Ð²ÑдÑÐ°Ð·Ñ Ð¿ÑокÑÑÑÑÑ Ð¹Ð¾Ð³Ð¾, забезпеÑÑÑÑи макÑималÑно плавний коÑиÑÑÑваÑÑкий доÑвÑд, попÑÑно обÑоблÑÑÑи подÑÑ.
ÐÐ»Ñ Ð´ÐµÑкиÑ
бÑаÑзеÑÑв (Firefox, Chrome) паÑамеÑÑ passive Ð¼Ð°Ñ Ñипове знаÑÐµÐ½Ð½Ñ true Ð´Ð»Ñ ÑакиÑ
подÑй Ñк touchstart або touchmove.
event.defaultPrevented
ÐлаÑÑивÑÑÑÑ event.defaultPrevented Ð¼Ð°Ñ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ true, ÑкÑо ÑÐ¸Ð¿Ð¾Ð²Ñ Ð´ÑÑ Ð±Ñло ÑкаÑовано, Ñ false в ÑнÑÐ¾Ð¼Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑ.
Ð ÑÑкавий ваÑÑÐ°Ð½Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑаннÑ.
ÐамâÑÑаÑÑе, в ÑоздÑÐ»Ñ ÐÑлÑбаÑковий меÑ
анÑзм (ÑÐ¿Ð»Ð¸Ð²Ð°Ð½Ð½Ñ Ñа занÑÑеннÑ) ми говоÑили пÑо event.stopPropagation() Ñ ÑÐ¾Ð¼Ñ Ð¿ÑÐ¸Ð¿Ð¸Ð½ÐµÐ½Ð½Ñ ÑÐ¿Ð»Ð¸Ð²Ð°Ð½Ð½Ñ â Ñе погано?
ÐÐ½Ð¾Ð´Ñ Ð·Ð°Ð¼ÑÑÑÑ ÑÑого ми можемо викоÑиÑÑовÑваÑи event.defaultPrevented, Ñоб повÑдомиÑи ÑнÑим обÑобникам, Ñо подÑÑ Ð±Ñла обÑоблена.
РозглÑнемо пÑакÑиÑний пÑиклад.
Типово бÑаÑÐ·ÐµÑ Ð¿Ñд ÑÐ°Ñ Ð¿Ð¾Ð´ÑÑ contextmenu (клÑк пÑÐ°Ð²Ð¾Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¾Ñ Ð¼Ð¸ÑÑ) показÑÑ ÐºÐ¾Ð½ÑекÑÑне Ð¼ÐµÐ½Ñ Ð·Ñ ÑÑандаÑÑними паÑамеÑÑами. Ðи можемо запобÑгÑи ÑÑÐ¾Ð¼Ñ Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°Ñи ÑвоÑ, оÑÑ Ñак:
<button>ÐÑавий клÑк показÑÑ ÐºÐ¾Ð½ÑекÑÑне Ð¼ÐµÐ½Ñ Ð±ÑаÑзеÑа</button>
<button oncontextmenu="alert('ÐалÑÑмо наÑе менÑ'); return false">
ÐÑавий клÑк показÑÑ Ð½Ð°Ñе влаÑне конÑекÑÑне менÑ
</button>
ТепеÑ, на додаÑок до ÑÑого конÑекÑÑного менÑ, ми Ñ Ð¾ÑÑли б ÑеалÑзÑваÑи конÑекÑÑне Ð¼ÐµÐ½Ñ Ð²ÑÑого докÑменÑа.
ÐÑÑÐ»Ñ ÐºÐ»ÑÐºÑ Ð¿ÑÐ°Ð²Ð¾Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¾Ñ Ð¼Ð¸ÑÑ Ð¼Ð°Ñ Ð·âÑвиÑиÑÑ Ð½Ð°Ð¹Ð±Ð»Ð¸Ð¶Ñе конÑекÑÑне менÑ.
<p>ÐÑавий клÑк, Ñоб вÑдкÑиÑи конÑекÑÑне Ð¼ÐµÐ½Ñ Ð´Ð¾ÐºÑменÑа</p>
<button id="elem">ÐÑавий клÑк, Ñоб вÑдкÑиÑи конÑекÑÑне Ð¼ÐµÐ½Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸</button>
<script>
elem.oncontextmenu = function(event) {
event.preventDefault();
alert("ÐонÑекÑÑне Ð¼ÐµÐ½Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸");
};
document.oncontextmenu = function(event) {
event.preventDefault();
alert("ÐонÑекÑÑне Ð¼ÐµÐ½Ñ Ð´Ð¾ÐºÑменÑа");
};
</script>
ÐÑоблема полÑÐ³Ð°Ñ Ð² ÑомÑ, Ñо коли ми клÑкаÑмо на elem, ми оÑÑимÑÑмо два менÑ: на ÑÑÐ²Ð½Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸ Ñа (подÑÑ ÑпливаÑ) на ÑÑÐ²Ð½Ñ Ð´Ð¾ÐºÑменÑа.
Як Ñе випÑавиÑи? Ðдне з ÑÑÑÐµÐ½Ñ Ð¿Ð¾Ð»ÑÐ³Ð°Ñ Ð² ÑомÑ, Ñоб подÑмаÑи Ñак: «Ðоли ми обÑоблÑÑмо пÑавий клÑк в обÑÐ¾Ð±Ð½Ð¸ÐºÑ ÐºÐ½Ð¾Ð¿ÐºÐ¸, давайÑе зÑпинимо ÑÐ¿Ð»Ð¸Ð²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð´ÑÑ» Ñа викоÑиÑÑовÑÑмо event.stopPropagation():
<p>ÐÑавий клÑк, Ñоб вÑдкÑиÑи Ð¼ÐµÐ½Ñ Ð´Ð¾ÐºÑменÑа</p>
<button id="elem">ÐÑавий клÑк, Ñоб вÑдкÑиÑи Ð¼ÐµÐ½Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸ (випÑавлено за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ event.stopPropagation)</button>
<script>
elem.oncontextmenu = function(event) {
event.preventDefault();
event.stopPropagation();
alert("ÐонÑекÑÑне Ð¼ÐµÐ½Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸");
};
document.oncontextmenu = function(event) {
event.preventDefault();
alert("ÐонÑекÑÑне Ð¼ÐµÐ½Ñ Ð´Ð¾ÐºÑменÑа");
};
</script>
Ð¢ÐµÐ¿ÐµÑ Ð¼ÐµÐ½Ñ Ð½Ð° ÑÑÐ²Ð½Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸ пÑаÑÑÑ, Ñк задÑмано. Ðле ÑÐºÐ¾Ñ ÑÑноÑ? Ðи назавжди забоÑонÑÑмо доÑÑÑп до ÑнÑоÑмаÑÑÑ Ð¿Ñо клÑк пÑÐ°Ð²Ð¾Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¾Ñ Ð¼Ð¸ÑÑ Ð´Ð»Ñ Ð±ÑдÑ-Ñкого зовнÑÑнÑого кодÑ, вклÑÑаÑÑи лÑÑилÑники, ÑÐºÑ Ð·Ð±Ð¸ÑаÑÑÑ ÑÑаÑиÑÑÐ¸ÐºÑ ÑоÑо. Це зовÑÑм неÑозÑмно.
ÐлÑÑеÑнаÑивним ÑÑÑеннÑм бÑло б пеÑевÑÑиÑи в обÑÐ¾Ð±Ð½Ð¸ÐºÑ document, Ñи запобÑгли Ñиповим дÑÑ? ЯкÑо Ñе Ñак, знаÑиÑÑ, подÑÑ Ð±Ñла обÑоблена, Ñ Ð½Ð°Ð¼ не поÑÑÑбно на Ñе ÑеагÑваÑи.
<p>ÐÑавий клÑк, Ñоб вÑдкÑиÑи конÑекÑÑне Ð¼ÐµÐ½Ñ Ð´Ð¾ÐºÑменÑа (додано пеÑевÑÑÐºÑ Ð´Ð»Ñ event.defaultPrevented)</p>
<button id="elem">ÐÑавий клÑк, Ñоб вÑдкÑиÑи Ð¼ÐµÐ½Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸</button>
<script>
elem.oncontextmenu = function(event) {
event.preventDefault();
alert("ÐонÑекÑÑне Ð¼ÐµÐ½Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸");
};
document.oncontextmenu = function(event) {
if (event.defaultPrevented) return;
event.preventDefault();
alert("ÐонÑекÑÑне Ð¼ÐµÐ½Ñ Ð´Ð¾ÐºÑменÑа");
};
</script>
Ð¢ÐµÐ¿ÐµÑ Ñеж вÑе пÑаÑÑÑ ÐºÐ¾ÑекÑно. ЯкÑо ми маÑмо Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ñ ÐµÐ»ÐµÐ¼ÐµÐ½Ñи, Ñ ÐºÐ¾Ð¶ÐµÐ½ з ниÑ
Ð¼Ð°Ñ Ð²Ð»Ð°Ñне конÑекÑÑне менÑ, Ñе Ñакож ÑпÑаÑÑÑ. ÐÑоÑÑо не забÑдÑÑе пеÑевÑÑиÑи наÑвнÑÑÑÑ event.defaultPrevented Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð¼Ñ Ð¾Ð±ÑÐ¾Ð±Ð½Ð¸ÐºÑ contextmenu.
Як ми ÑÑÑко баÑимо, event.stopPropagation() Ñа event.preventDefault() (Ñакож вÑдомий Ñк return false) â Ñе два ÑÑÐ·Ð½Ñ Ð¼ÐµÑоди. Ðони не повâÑÐ·Ð°Ð½Ñ Ð¾Ð´Ð¸Ð½ з одним.
ÐÑнÑÑÑÑ Ñакож алÑÑеÑнаÑÐ¸Ð²Ð½Ñ ÑпоÑоби ÑеалÑзаÑÑÑ Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ð¸Ñ
конÑекÑÑниÑ
менÑ. Ðдин з ниÑ
â Ñе маÑи Ñдиний глобалÑний обâÑÐºÑ Ð· обÑобником Ð´Ð»Ñ document.oncontextmenu, а Ñакож меÑодами, ÑÐºÑ Ð´Ð¾Ð·Ð²Ð¾Ð»ÑÑÑÑ Ð½Ð°Ð¼ збеÑÑгаÑи в нÑÐ¾Ð¼Ñ ÑнÑÑ Ð¾Ð±Ñобники.
ÐбâÑÐºÑ Ð±Ñде ловиÑи бÑдÑ-Ñкий клÑк пÑÐ°Ð²Ð¾Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¾Ñ Ð¼Ð¸ÑÑ, пеÑеглÑдаÑи збеÑÐµÐ¶ÐµÐ½Ñ Ð¾Ð±Ñобники Ñа запÑÑкаÑи вÑдповÑдний.
Ðле ÑÐ¾Ð´Ñ ÐºÐ¾Ð¶ÐµÐ½ ÑÑÐ°Ð³Ð¼ÐµÐ½Ñ ÐºÐ¾Ð´Ñ, ÑÐºÐ¾Ð¼Ñ Ð±Ñде поÑÑÑбно конÑекÑÑне менÑ, повинен знаÑи пÑо Ñей обâÑÐºÑ Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑваÑи його замÑÑÑÑ Ð²Ð»Ð°Ñного обÑобника contextmenu.
ÐÑдÑÑмки
ÐÑнÑÑ Ð±Ð°Ð³Ð°Ñо ÑÐ¸Ð¿Ð¾Ð²Ð¸Ñ Ð´Ñй бÑаÑзеÑа:
mousedownâ ÑозпоÑÐ¸Ð½Ð°Ñ Ð²Ð¸Ð´ÑÐ»ÐµÐ½Ð½Ñ (ÑкÑо пеÑемÑÑÑиÑи кÑÑÑоÑ).clickна<input type="checkbox">â додаÑ/знÑÐ¼Ð°Ñ Ð¿ÑапоÑеÑÑ Ð·input.submitâ бÑаÑÐ·ÐµÑ Ð½Ð°Ð´ÑÐ¸Ð»Ð°Ñ ÑоÑÐ¼Ñ Ð½Ð° ÑеÑÐ²ÐµÑ Ð¿ÑÑÐ»Ñ ÐºÐ»ÑÐºÑ Ð½Ð°<input type="submit">або наÑиÑÐºÐ°Ð½Ð½Ñ Enter вÑеÑÐµÐ´Ð¸Ð½Ñ Ð¿Ð¾Ð»Ñ ÑоÑми.keydownâ наÑиÑÐºÐ°Ð½Ð½Ñ ÐºÐ»Ð°Ð²ÑÑÑ Ð¼Ð¾Ð¶Ðµ пÑизвеÑÑи до Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð² поле або ÑнÑÐ¸Ñ Ð´Ñй.contextmenuâ подÑÑ Ð²ÑдбÑваÑÑÑÑÑ Ð¿Ñи пÑÐ°Ð²Ð¾Ð¼Ñ ÐºÐ»ÑÐºÑ Ñа полÑÐ³Ð°Ñ Ð² ÑомÑ, Ñоб показаÑи конÑекÑÑне Ð¼ÐµÐ½Ñ Ð±ÑаÑзеÑа.- â¦Ñа багаÑо ÑнÑÐ¸Ñ â¦
УÑÑм Ñиповим дÑÑм можна запобÑгÑи, ÑкÑо ми Ñ Ð¾Ñемо обÑоблÑÑи подÑÑ Ð²Ð¸ÐºÐ»ÑÑно за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ JavaScript.
Щоб запобÑгÑи ÑиповÑй дÑÑ, викоÑиÑÑовÑйÑе event.preventDefault() або return false. ÐÑÑгий меÑод пÑаÑÑÑ Ð»Ð¸Ñе Ð´Ð»Ñ Ð¾Ð±ÑобникÑв, пÑизнаÑениÑ
за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ on<event>.
ÐаÑамеÑÑ passive: true Ð´Ð»Ñ addEventListener повÑдомлÑÑ Ð±ÑаÑзеÑÑ, Ñо дÑÑ Ð½Ðµ бÑде ÑкаÑовано. Це коÑиÑно Ð´Ð»Ñ Ð´ÐµÑкиÑ
мобÑлÑниÑ
подÑй, ÑакиÑ
Ñк touchstart Ñ touchmove, Ñоб повÑдомиÑи бÑаÑзеÑÑ, Ñо вÑн не повинен ÑекаÑи закÑнÑÐµÐ½Ð½Ñ ÑобоÑи обÑобникÑв, пеÑÑ Ð½Ñж ÑазпоÑаÑи пÑокÑÑÑкÑ.
ЯкÑо ÑÐ¸Ð¿Ð¾Ð²Ñ Ð´ÑÑ Ð±Ñло ÑкаÑовано, знаÑÐµÐ½Ð½Ñ event.defaultPrevented ÑÑÐ°Ñ true, ÑнакÑе false.
ТеÑ
нÑÑно, запобÑгаÑÑи ÑиповÑй дÑÑ Ñ Ð´Ð¾Ð´Ð°ÑÑи JavaScript, ми можемо налаÑÑÑваÑи поведÑÐ½ÐºÑ Ð±ÑдÑ-ÑкиÑ
елеменÑÑв. ÐапÑиклад, ми можемо зÑобиÑи Ñак, Ñоб поÑÐ¸Ð»Ð°Ð½Ð½Ñ <a> пÑаÑÑвало Ñк кнопка, а кнопка <button> вела Ñебе Ñк поÑÐ¸Ð»Ð°Ð½Ð½Ñ (пеÑеÑпÑÑмовÑвала на ÑнÑÑ URL-адÑеÑÑ Ð°Ð±Ð¾ ÑоÑÑ Ð¿Ð¾Ð´Ñбне).
Ðле загалом ми Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ð·Ð±ÐµÑÑгаÑи ÑеманÑиÑне знаÑÐµÐ½Ð½Ñ ÐµÐ»ÐµÐ¼ÐµÐ½ÑÑв HTML. ÐапÑиклад, виконÑваÑи навÑгаÑÑÑ Ð¿Ð¾Ð²Ð¸Ð½Ð½Ð° не кнопка, а Ñег <a>.
ÐкÑÑм Ñого, Ñо Ñе âпÑоÑÑо Ñ Ð¾ÑоÑа ÑÑÑâ, Ñка ÑобиÑÑ Ð²Ð°Ñ HTML кÑаÑим з ÑоÑки зоÑÑ Ð´Ð¾ÑÑÑпноÑÑÑ.
Також ÑкÑо ми ÑозглÑнемо пÑиклад Ñз <a>, Ñо звеÑнÑÑÑ ÑвагÑ: бÑаÑÐ·ÐµÑ Ð´Ð¾Ð·Ð²Ð¾Ð»ÑÑ Ð½Ð°Ð¼ вÑдкÑиваÑи ÑÐ°ÐºÑ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð² Ð½Ð¾Ð²Ð¾Ð¼Ñ Ð²ÑÐºÐ½Ñ (клÑкаÑÑи на ниÑ
пÑÐ°Ð²Ð¾Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¾Ñ Ð¼Ð¸ÑÑ Ð°Ð±Ð¾ ÑнÑими ÑпоÑобами). РлÑдÑм Ñаке подобаÑÑÑÑÑ. Ðле ÑкÑо ми Ñобимо кнопкÑ, Ñка веде Ñебе Ñк поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ JavaScript, Ñ Ð½Ð°Ð²ÑÑÑ Ð²Ð¸Ð³Ð»ÑÐ´Ð°Ñ Ñк поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ CSS, ÑÐ¾Ð´Ñ <a>-ÑпеÑиÑÑÑÐ½Ñ ÑÑнкÑÑÑ Ð±ÑаÑзеÑа вÑе одно не пÑаÑÑваÑимÑÑÑ Ð´Ð»Ñ Ð½ÐµÑ.
ÐоменÑаÑÑ
<code>, Ð´Ð»Ñ ÐºÑлÑÐºÐ¾Ñ ÑÑдкÑв â обгоÑнÑÑÑ ÑÑ Ñегом<pre>, Ð´Ð»Ñ Ð¿Ð¾Ð½Ð°Ð´ 10 ÑÑдкÑв â викоÑиÑÑовÑйÑе пÑÑоÑниÑÑ (plnkr, jsbin, codepenâ¦)