å¤ãã®ã¤ãã³ãã¯èªåçã«ãã©ã¦ã¶ã®åä½ã«ç¹ããã¾ãã
ä¾ãã°:
- ãªã³ã¯ã®ã¯ãªã㯠â ãã®URLã«è¡ãã®ãéå§ãã¾ãã
- ãã©ã¼ã å ã®ãµãããããã¿ã³ã®ã¯ãªã㯠â ãµã¼ãã¸ã®éä¿¡ãéå§ãã¾ãã
- ããã¹ãä¸ã§ãã¦ã¹ãã¿ã³ãæ¼ããç§»åããã â ããã¹ãã鏿ãã¾ãã
JavaScript ã§ã¤ãã³ããå¦çãã¦ããå ´åããã©ã¦ã¶ã®åä½ã¯å¿ è¦ãªããã¨ãããããã¾ãã幸ãã«ããããã¯é²ããã¨ãã§ãã¾ãã
ãã©ã¦ã¶ã®åä½ãé²ã
ãã©ã¦ã¶ã«åä½ãã¦ã»ãããªãã¨ä¼ããæ¹æ³ã2ã¤ããã¾ã:
- ä¸»ãªæ¹æ³ã¯ã
eventãªãã¸ã§ã¯ãã使ããã¨ã§ããã¡ã½ããevent.preventDefault()ãããã¾ãã - ãã³ãã©ã
on<event>(addEventListenerã§ã¯ãªã)ã使ã£ã¦å²ãå½ã¦ããã¦ããå ´åãããããfalseãè¿ãã ãã§å®ç¾ã§ãã¾ãã
ä¸ã®ä¾ã§ã¯ããªã³ã¯ãã¯ãªãã¯ãã¦ãURLã夿´ããã¾ãã:
<a href="/" onclick="return false">Click here</a>
or
<a href="/" onclick="event.preventDefault()">here</a>
true ãè¿ãå¿
è¦ã¯ããã¾ããã¤ãã³ããã³ãã©ã«ãã£ã¦è¿ãããå¤ã¯é常ç¡è¦ããã¾ãã
å¯ä¸ã®ä¾å¤ã¯ â on<event> ã使ç¨ãã¦å²ãå½ã¦ããããã³ãã©ããã® return false ã§ãã
ãã®ä»ãã¹ã¦ã®å ´åãè¿å´ã¯å¿ è¦ã¨ãããä½ãããã¾ããã
ä¾: ã¡ãã¥ã¼
ãµã¤ãã®ã¡ãã¥ã¼ãèãã¾ããã:
<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 ã使ç¨ãã¦æ¬¡ã®ããã«è¦ãã¾ã:
ã¡ãã¥ã¼é
ç®ã¯ãªã³ã¯ <a> ã§ãã¿ã³ã§ã¯ããã¾ãããããã¯ä¾ãã°æ¬¡ã®ãããªããã¤ãã®å©ç¹ãããã¾ã:
- å¤ãã®äººã¯ âå³ã¯ãªãã¯â ã使ãã®ã好ãã§ã â âæ°ããã¦ã£ã³ãã¦ã§éãâã
<button>ã¾ãã¯<span>ã使ãã¨ãããã¯åä½ãã¾ããã - æ¤ç´¢ã¨ã³ã¸ã³ã¯ãã¤ã³ããã¯ã¹ã使ããã¨ãã
<a href="...">ã®ãªã³ã¯ã辿ãã¾ãã
ãªã®ã§ãç§ãã¡ã¯ãã¼ã¯ã¢ããã§ã¯ <a> ã使ãã¾ããããããé常㯠JavaScript ã§ã¯ãªãã¯ãå¦çãããã¨ãæå³ãã¾ããã ãããããã©ã«ãã®ãã©ã¦ã¶åä½ãé²ãå¿
è¦ãããã¾ãã
ãã®ããã«ãªãã¾ã:
menu.onclick = function(event) {
if (event.target.nodeName != 'A') return;
let href = event.target.getAttribute('href');
alert( href ); // ...ãµã¼ãããã®ãã¼ããUIã®çæãªã©
return false; // ãã©ã¦ã¶åä½ãé²ã (URLã¸è¡ãã¾ãã)
};
ãã return false ãçç¥ããã¨ãæã
ã®ã³ã¼ããå®è¡ããå¾ããã©ã¦ã¶ã¯ âããã©ã«ãåä½â ãè¡ãã§ããã â href ã® URL ã辿ãã¾ãã
ã¨ããã§ãããã§ã¯ã¤ãã³ãç§»è²ã使ãã¨ãã¡ãã¥ã¼ãæè»ã«ã§ãã¾ãããã¹ãããããªã¹ãã追å ããããCSSã使ã£ã¦ âã¹ã©ã¤ããã¦ã³â ãããã¨ãã§ãã¾ãã
ãããªãã¤ãã³ãã®é²æ¢
ããã¤ãã³ãã¯å¥ã®ãã®ã¸ã¨æµãã¾ããããæåã®ã¤ãã³ããé²ãå ´åãï¼ã¤ç®ã¯ããã¾ããã
ä¾ãã°ã<input> ãã£ã¼ã«ãä¸ã® mousedown ã¯ãããã«ãã©ã¼ã«ã¹ããfocus ã¤ãã³ãã«ç¹ããã¾ãããã mousedown ã¤ãã³ããé²ãå ´åããã©ã¼ã«ã¹ã¯èµ·ããã¾ããã
ä¸ã®æåã® <input> ãã¯ãªãã¯ãã¦ã¿ã¦ãã ãã â focus ã¤ãã³ããèµ·ãã¾ããããã¯æ£å¸¸ã§ãã
ãããã2ã¤ç®ãã¯ãªãã¯ããå ´åããã©ã¼ã«ã¹ã¯ããã¾ããã
<input value="Focus works" onfocus="this.value=''">
<input onmousedown="return false" onfocus="this.value=''" value="Click me">
ãªããªãããã©ã¦ã¶ã®ã¢ã¯ã·ã§ã³ã¯ mousedown ã§ãã£ã³ã»ã«ãããããã§ããinput ãå
¥åããå¥ã®æ¹æ³ã使ãã¨ããã©ã¼ã«ã¹ã¯ã¾ã å¯è½ã§ããä¾ãã°ãæåã®å
¥åããæ¬¡ã®å
¥åã«åãæ¿ããããã® Tab ãã¼ã§ããããããã¦ã¹ã¯ãªãã¯ã¯ãã以ä¸åä½ãã¾ããã
event.defaultPrevented
ããã©ã«ãã¢ã¯ã·ã§ã³ãé²ãããå ´åããããã㣠event.defaultPrevented 㯠true ã§ããã以å¤ã¯ false ã§ãã
è峿·±ãã¦ã¼ã¹ã±ã¼ã¹ãããã¾ãã
ãã£ãã¿ã¼ ãããªã³ã° 㨠ãã£ããã£ãªã³ã° ã§ event.stopPropagation() ã«ã¤ãã¦è©±ãã¾ãããããããªã³ã°ã®åæ¢ãæªãçç±ãè¦ãã¦ãã¾ããï¼
代ããã«ãevent.defaultPrevented ã使ç¨ãããã¨ãããã¾ãã
ãããªã³ã°ã®åæ¢ãå¿ è¦ã«è¦ããå®è·µçãªä¾ãè¦ã¦ã¿ã¾ããããããããå®éã«ã¯ãããªã³ã°ãæ¢ãããã¨ãªã䏿ãè¡ããã¨ãã§ãã¾ãã
ããã©ã«ãã§ã¯ãcontextmenu ã¤ãã³ãæ(ãã¦ã¹ã®å³ã¯ãªãã¯)ã®ãã©ã¦ã¶ã¯ãæ¨æºãªãã·ã§ã³ä»ãã®ã³ã³ããã¹ãã¡ãã¥ã¼ã表示ãã¾ããç§ãã¡ã¯ãããé²ãã§ãç¬èªã®ã¡ãã¥ã¼ã表示ãããã¨ãã§ãã¾ã:
<button>Right-click for browser context menu</button>
<button oncontextmenu="alert('Draw our menu'); return false">
Right-click for our context menu
</button>
ä»ãæã ã®ãªãã·ã§ã³ã使ç¨ãããç¬èªã®ããã¥ã¡ã³ãå ¨ä½ã®ã³ã³ããã¹ãã¡ãã¥ã¼ãå®è£ ãããã¨ãã¾ããããããã¦ããã¥ã¡ã³ãå ã«ã¯ãç¬èªã®ã³ã³ããã¹ãã¡ãã¥ã¼ãæã¤ä»ã®è¦ç´ ãããå¯è½æ§ãããã¾ãã:
<p>Right-click here for the document context menu</p>
<button id="elem">Right-click here for the button context menu</button>
<script>
elem.oncontextmenu = function(event) {
event.preventDefault();
alert("Button context menu");
};
document.oncontextmenu = function(event) {
event.preventDefault();
alert("Document context menu");
};
</script>
åé¡ã¯ã elem ã®ã¯ãªãã¯æ2ã¤ã®ã¡ãã¥ã¼ãåå¾ãã¾ã: ãã¿ã³ã¬ãã«ã¨(ã¤ãã³ããããã«ã)ããã¥ã¡ã³ãã¬ãã«ã®ã¡ãã¥ã¼ã§ãã
ã©ããã£ã¦ä¿®æ£ãã¾ããï¼1ã¤ã®æ¹æ³ã¯ãã®ããã«èãããã¨ã§ã: âãã¿ã³ãã³ãã©ã®ä¸ã§ã¤ãã³ããå®å
¨ãå¦çãããããæ¢ããâ ã§ãevent.stopPropagation() ã使ãã¾ã:
<p>Right-click for the document menu</p>
<button id="elem">Right-click for the button menu (fixed with event.stopPropagation)</button>
<script>
elem.oncontextmenu = function(event) {
event.preventDefault();
event.stopPropagation();
alert("Button context menu");
};
document.oncontextmenu = function(event) {
event.preventDefault();
alert("Document context menu");
};
</script>
ããã§ããã¿ã³ã¬ãã«ã®ã¡ãã¥ã¼ã¯æå¾ éãåä½ãã¾ãããããã³ã¹ãã¯é«ãã§ããçµ±è¨ãåéããã«ã¦ã³ã¿ã¼ãªã©ãå¤é¨ã³ã¼ãã®å³ã¯ãªãã¯ã«é¢ããæ å ±ã¸ã®ã¢ã¯ã»ã¹ã¯æ°¸ä¹ ã«æå¦ããã¾ãã ããã¯ã¾ã£ããè³¢æã§ã¯ããã¾ããã
代æ¿ã®è§£æ±ºçã¯ãããã©ã«ãã®ã¢ã¯ã·ã§ã³ãé²ããããã©ããã document ãã³ãã©ã®ä¸ã§ããã§ãã¯ãããã¨ã§ããããããã§ããã°ãã¤ãã³ãã¯å¦çããã¦ãããåå¿ããå¿
è¦ã¯ããã¾ããã
<p>Right-click for the document menu (fixed with event.defaultPrevented)</p>
<button id="elem">Right-click for the button menu</button>
<script>
elem.oncontextmenu = function(event) {
event.preventDefault();
alert("Button context menu");
};
document.oncontextmenu = function(event) {
if (event.defaultPrevented) return;
event.preventDefault();
alert("Document context menu");
};
</script>
ããã§ããã¹ã¦æ£ããåä½ãã¾ãããã¹ããããè¦ç´ ãæã£ã¦ãããããããç¬èªã®ã³ã³ããã¹ãã¡ãã¥ã¼ãæã£ã¦ããå ´åãåä½ãã¾ãããã ãå contextmenu ãã³ãã©ã®ä¸ã§ event.defaultPrevented ã確èªãã¦ãã ããã
æããã«åããããã«ãevent.stopPropagation() 㨠event.preventDefault() (return false ã¨ãã¦ãç¥ããã¦ãã)ã¯2ã¤ã®ç°ãªããã®ã§ãããããã¯ãäºãé¢ä¿ããã¾ããã
ãã¹ããããã³ã³ããã¹ãã¡ãã¥ã¼ãå®è£
ããå¥ã®æ¹æ³ãããã¾ãããã®1ã¤ã¯ãdocument.oncontextmenu ãå¦çããã¡ã½ãããæã¤ç¹å¥ãªã°ãã¼ãã«ãªãã¸ã§ã¯ãã¨ãæ§ã
㪠âä½ã¬ãã«â ã®ãã³ãã©ãããã«æ ¼ç´ã§ããã¡ã½ãããæã¤ãã¨ã§ãã
ãªãã¸ã§ã¯ãã¯ä»»æã®å³ã¯ãªãã¯ããã£ããããæ ¼ç´ããã¦ãããã³ãã©ãè¦ã¦é©åãªãã®ãå®è¡ããã§ãããã
ããããã³ã³ããã¹ãã¡ãã¥ã¼ãå¿
è¦ã¨ããåã³ã¼ãã¯ããã®ãªãã¸ã§ã¯ãã«ã¤ãã¦ç¥ã£ã¦ãã¦ãèªèº«ã® contextmenuãã³ãã©ã®ä»£ããã«ãã®ãã«ãã使ãã¹ãã§ã
ãµããª
å¤ãã®ããã©ã«ãã®ãã©ã¦ã¶ã¢ã¯ã·ã§ã³ãããã¾ã:
mousedownâ 鏿ãå§ãã¾ã(鏿ããã«ã¯ãã¦ã¹ãç§»åãã¾ã)ã<input type="checkbox">ã®clickâinputã®ãã§ãã¯ON/OFFãsubmitâ<input type="submit">ã®ã¯ãªãã¯ã¾ãã¯ãã©ã¼ã ãã£ã¼ã«ãå ã§ Enter ãæ¼ãã¨ãã®ã¤ãã³ããçºçãããã©ã¦ã¶ã¯ãã®å¾ã«ãã©ã¼ã ãéä¿¡ãã¾ããwheelâ ãã¦ã¹ãã¤ã¼ã«ã¤ãã³ãã¯ããã©ã«ãåä½ã¨ãã¦ã¹ã¯ãã¼ã«ããã¾ããkeydownâ ãã¼ã®æ¼ä¸ã¯ãã£ã¼ã«ãã¸ã®æåã®è¿½å ãã¾ãã¯å¥ã®ã¢ã¯ã·ã§ã³ã«ãªãã¾ããcontextmenuâ ãã®ã¤ãã³ãã¯å³ã¯ãªãã¯ã§çºçããã¢ã¯ã·ã§ã³ã¯ãã©ã¦ã¶ã®ã³ã³ããã¹ãã¡ãã¥ã¼ã表示ãããã¨ã§ãã- â¦ä»ã«ãããã¾ãâ¦
JavaScriptã§ã¤ãã³ããæä»çã«å¦çãããå ´åãããã©ã«ãã®ã¢ã¯ã·ã§ã³ããã¹ã¦é²ããã¨ãã§ãã¾ãã
ããã©ã«ãã®ã¢ã¯ã·ã§ã³ãé²ãã«ã¯ â event.preventDefault() ã¾ã㯠return false ã使ãã¾ãã2ã¤ç®ã®æ¹æ³ã¯ on<event> ã§å²ãå½ã¦ããããã³ãã©ã«å¯¾ãã¦ã®ã¿æ©è½ãã¾ãã
ããã©ã«ãã¢ã¯ã·ã§ã³ãé²ãããå ´åãevent.defaultPrevented ã®å¤ã¯ true ã«ãªãããã以å¤ã¯ false ã«ãªãã¾ãã
æè¡çã«ã¯ãããã©ã«ãã¢ã¯ã·ã§ã³ãé²ããJavaScript ã追å ãããã¨ã«ãã£ã¦ãä»»æã®è¦ç´ ã®æ¯ãèããã«ã¹ã¿ãã¤ãºãããã¨ãå¯è½ã§ããä¾ãã°ã<a> ãä½ããããããã¿ã³ã®ããã«åä½ããããã<button> ããªã³ã¯(å¥ã®URLã«ãªãã¤ã¬ã¯ããããªã©)ã¨ãã¦æ¯ãèããããã¨ãã§ãã¾ãã
ããããä¸è¬çã«ã¯ HTMLè¦ç´ ã®ã»ãã³ãã£ãã¯ãªæå³ãç¶æããã¹ãã§ããä¾ãã°ã<a> ã¯ãã¿ã³ã§ã¯ãªãããã²ã¼ã·ã§ã³ãå®è¡ããã¹ãã§ãã
âåãªãè¯ããã®â ã«å ãã¦ãã¢ã¯ã»ã·ããªãã£ã®ç¹ã§HTMLãããè¯ããã¾ãã
ã¾ãã<a> ã®ä¾ãèããå ´åãæ¬¡ã®ãã¨ã«æ³¨æãã¦ãã ãã: ãã©ã¦ã¶ã¯ãã®ãããªãªã³ã¯ãæ°ããã¦ã£ã³ãã¦(å³ã¯ãªãã¯ãããä»ã®ææ®µã§)ã§éããã¨ãã§ãã¾ããããã¦äººã
ã¯ããã好ãã§ããããããJavaScript ã使ã£ã¦ãªã³ã¯ã¨ãã¦æ¯ãèããã¿ã³ãä½ããCSSã使ã£ã¦ãªã³ã¯ã®ãããªè¦ãç®ã«ãã¦ãã<a> åºæã®ãã©ã¦ã¶æ©è½ã¯ä¾ç¶ã¨ãã¦åä½ãã¾ããã
ã³ã¡ã³ã
<code>ã¿ã°ã使ã£ã¦ãã ãããè¤æ°è¡ã®å ´åã¯<pre>ãã10è¡ãè¶ ããå ´åã«ã¯ãµã³ãããã¯ã¹ã使ã£ã¦ãã ãã(plnkr, JSBin, codepenâ¦)ã