با ÛÚ© Ù Ø«Ø§Ù Ø´Ø±ÙØ¹ Ù ÛâÚ©ÙÛÙ .
اÛÙ Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù ب٠<div> اختصاص Ø¯Ø§Ø¯Ù Ø´Ø¯ÙØ اÙ
ا در ØµÙØ±ØªÛ Ú©Ù ÙØ± تگ Ø¯Ø§Ø®Ù Ø¢ÙØ±Ø§ Ù
اÙÙØ¯ <em> ÛØ§ <code> Ú©ÙÛÚ© Ú©ÙÛØ¯Ø باز ÙÙ
اجرا Ù
ÛâØ´ÙØ¯:
<div onclick="alert('Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù!')">
<em>اگر رÙÛ <code>EM</code> Ú©ÙÛÚ© Ú©ÙÛØ¯Ø Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù رÙÛ <code>DIV</code> اجرا Ù
ÛâØ´ÙØ¯.</em>
</div>
اÛÙ Ø±ÙØªØ§Ø± Ú©Ù
Û Ø¹Ø¬ÛØ¨ ÙÛØ³ØªØ ÚØ±Ø§ Ú©ÙØªØ±ÙâÚ©ÙÙØ¯ÙâÛ Ø±ÙÛ <div> Ø¨Ø§ÛØ¯ زÙ
اÙÛ Ø§Ø¬Ø±Ø§ Ø´ÙØ¯ Ú©Ù Ú©ÙÛÚ© در اص٠رÙÛ <em> Ø¨ÙØ¯Ù استØ
Ø¨Ø§ÙØ§ Ø±ÙØªÙ ØØ¨Ø§Ø¨Û
Ø±ÙØªØ§Ø± Ø¨Ø§ÙØ§Ø±ÙØªÙ ØØ¨Ø§Ø¨Û ساد٠است.
ÙÙØªÛ ک٠رÙÛØ¯Ø§Ø¯Û رÙÛ ÛÚ© Ø¹ÙØµØ± Ø§ØªÙØ§Ù Ù ÛâØ§ÙØªØ¯Ø اÙÙ Ú©ÙØªØ±ÙâÚ©ÙÙØ¯ÙâÙØ§ را رÙÛ Ø®ÙØ¯Ø´ اجرا Ù ÛâÚ©ÙØ¯Ø بعد رÙÛ Ø¹ÙØµØ± پدرش اجرا Ù ÛâÚ©ÙØ¯Ø Ù ÙÙ ÛÙØ·Ùر تا Ø¨Ø§ÙØ§ØªØ±Û٠اجداد Ø¢Ù.
ÙØ±Ø¶ Ú©ÙÛÙ
Ú©Ù Ø³Ù Ø¹ÙØµØ± ت٠در ØªÙ Ø¨Ù ØµÙØ±Øª âFORM > DIV > P با ÛÚ© Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù رÙÛ ÙØ± کداÙ
از Ø¢ÙâÙØ§ داشت٠باشÛÙ
:
<style>
body * {
margin: 10px;
border: 1px solid blue;
}
</style>
<form onclick="alert('form')">FORM
<div onclick="alert('div')">DIV
<p onclick="alert('p')">P</p>
</div>
</form>
ÛÚ© Ú©ÙÛÚ© رÙÛ <p> اÙ٠باعث ÙØ±Ø§Ø®ÙاÙÛ onlick Ø¨Ù ØµÙØ±Øª Ø²ÛØ± Ù
ÛâØ´ÙØ¯:
- رÙÛ
<p>. - رÙÛ
<div>Ø¨ÛØ±ÙÙÛ. - رÙÛ
<form>Ø¨ÛØ±ÙÙÛ. - ÙÙ
ÛÙØ·Ùر Ø¨Ø§ÙØ§ Ù
ÛâØ±ÙØ¯ تا رÙÛ Ø´Ø¦
documentÙ٠اجرا Ø´ÙØ¯.
پس اگر رÙÛ <p> Ú©ÙÛÚ© Ú©ÙÛÙ
Ø Ø³Ù Ù¾ÛØ§Ù
Ø¨Ù ØµÙØ±Øª Ø±ÙØ¨Ø±Ù Ù
Ø´Ø§ÙØ¯Ù Ù
ÛâÚ©ÙÛÙ
: p â div â form.
اÛ٠رÙÙØ¯ Ø§ØµØ·ÙØ§ØØ§Ù âØ¨Ø§ÙØ§Ø±ÙØªÙ ØØ¨Ø§Ø¨Ûâ ÛØ§ âbubblingâ Ø§Ø³ØªØ ÚÙ٠رÙÛØ¯Ø§Ø¯Ùا از داخÙÛâØªØ±Ù Ø¹ÙØµØ± تا Ø¹ÙØµØ±ÙØ§Û ÙØ§Ùد ٠اÙÙØ¯ ÛÚ© ØØ¨Ø§Ø¨ در Ø¢Ø¨Ø Ø¨Ø§ÙØ§ Ù ÛâØ±ÙÙØ¯.
Ú©ÙÙ Ù Ú©ÙÛØ¯Û در اÛ٠ج٠ÙÙ âØªÙØ±ÛØ¨Ø§â Ø§Ø³Øª.
Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ ÛÚ© رÙÛØ¯Ø§Ø¯ focus Ø¨Ø§ÙØ§ ÙÙ
ÛâØ±ÙÙØ¯. Ù
ثاÙâÙØ§Û دÛÚ¯Ø±Û ÙÛØ² ÙØ¬Ùد دارد ک٠با Ø¢ÙÙØ§ Ø¢Ø´ÙØ§ Ø®ÙØ§ÙÛÙ
شد. با اÛÙ ØØ§Ù اÛÙ ÛÚ© Ø§Ø³ØªØ«ÙØ§ است تا ÛÚ© ÙØ§ÙÙÙ. Ø¨ÛØ´ØªØ± رÙÛØ¯Ø§Ø¯Ùا Ø¨Ø§ÙØ§ Ù
ÛâØ±ÙÙØ¯.
ÙÛÚÚ¯Û event.target
ÛÚ© Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù رÙÛ ÛÚ© Ø¹ÙØµØ± ÙØ§Ùد ÙÙ ÛØ´Ù Ù ÛâØªÙØ§Ùد Ø¬Ø²Ø¦ÛØ§ØªÛ دربار٠اÛÙک٠رÙÛØ¯Ø§Ø¯ Ø¯Ø±ÙØ§ÙØ¹ÛØª کجا Ø§ØªÙØ§Ù Ø§ÙØªØ§Ø¯Ù است را Ø¨Ú¯ÛØ±Ø¯.
عÙ
ÛÙâØªØ±ÛÙ Ø¹ÙØµØ±Û ک٠باعث ÙØ±Ø§Ø®ÙاÙÛ ÛÚ© رÙÛØ¯Ø§Ø¯ شد٠را Ø¹ÙØµØ± ÙØ¯Ù Ù
ÛâÙØ§Ù
ÙØ¯Ø Ú©Ù Ù
ÛâØªÙØ§ÙÛÙ
با event.target Ø¨Ù Ø¢Ù Ø¯Ø³ØªØ±Ø³Û ÛØ§Ø¨ÛÙ
.
Ø¨Ù ØªÙØ§Ùت آ٠با this Ø¯ÙØª Ú©ÙÛØ¯ (=event.currentTarget):
event.targetâ Ø¹Ùصر âÙØ¯Ùâ Ø§Ø³Øª ک٠رÙÛØ¯Ø§Ø¯ را Ø¨Ø±Ø§Û Ø§ÙÙÛ٠بار ÙØ±Ø§Ø®ÙاÙÛ Ú©Ø±Ø¯ÙØ در Ø·Ù٠رÙÙØ¯ Ø¨Ø§ÙØ§Ø±Ùت٠تغÛÛØ± ÙÙ ÛâÚ©ÙØ¯.- â
thisâ Ø¹Ùصر âÙØ¹ÙÛâ Ø§Ø³ØªØ ک٠رÙÛØ¯Ø§Ø¯ در ØØ§Ù ØØ§Ø¶Ø± رÙÛ Ø¢Ù Ø¯Ø± ØØ§Ù اجرا است.
Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ اگر ÙÙØ· ÛÚ© Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù رÙÛ form.onclick داشت٠باشÛÙ
Ø Ø³Ù¾Ø³ Ù
ÛâØªÙØ§Ùد ÙÙ
Ù Ú©ÙÛÚ©âÙØ§Û Ø¯Ø§Ø®Ù ÙØ±Ù
را âØ¨Ú¯ÛØ±Ø¯â. بدÙÙ ØªÙØ¬Ù ب٠اÛÙÚ©Ù Ú©ÙÛÚ© کجا Ø§ØªÙØ§Ù Ø§ÙØªØ§Ø¯ÙØ ÙÙ
٠را٠را تا <form> Ø¨Ø§ÙØ§ Ù
ÛâØ±ÙØ¯ Ù Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù را اجرا Ù
ÛâÚ©ÙØ¯.
درÙÙ Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù form.onclick:
this(=event.currentTarget) ÙÙ Ø§Ù Ø¹ÙØµØ±<form>â Ø§Ø³ØªØ ÚÙÙ Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù رÙÛ Ø¢Ù Ø§Ø¬Ø±Ø§ شدÙ. ââ-event.targetØ¹ÙØµØ±Û درÙÙ ÙØ±Ù ک٠در اص٠کÙÛÚ© رÙÛ Ø¢Ù Ø§ØªÙØ§Ù Ø§ÙØªØ§Ø¯Ù.
ببÛÙÛØ¯:
form.onclick = function(event) {
event.target.style.backgroundColor = 'yellow';
// Ù
Ø±ÙØ±Ú¯Ø± کرÙÙ
Ù
ÙØ¯Ø§Ø±Û زÙ
ا٠ÙÛØ§Ø² دارد تا زرد را ÙÙØ§Ø´Û Ú©ÙØ¯
setTimeout(() => {
alert("target = " + event.target.tagName + ", this=" + this.tagName);
event.target.style.backgroundColor = ''
}, 0);
};form {
background-color: green;
position: relative;
width: 150px;
height: 150px;
text-align: center;
cursor: pointer;
}
div {
background-color: blue;
position: absolute;
top: 25px;
left: 25px;
width: 100px;
height: 100px;
}
p {
background-color: red;
position: absolute;
top: 25px;
left: 25px;
width: 50px;
height: 50px;
line-height: 50px;
margin: 0;
}
body {
line-height: 25px;
font-size: 16px;
}<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="example.css">
</head>
<body>
ÛÚ© Ú©ÙÛÚ© ÙØ± د٠<code>event.target</code> Ù <code>this</code> را Ø¨Ø±Ø§Û Ù
ÙØ§Ûس٠ÙÙ
Ø§ÛØ´ Ù
ÛâØ¯ÙØ¯:
<form id="form">FORM
<div>DIV
<p>P</p>
</div>
</form>
<script src="script.js"></script>
</body>
</html>اÙ
کا٠دارد Ú©Ù event.target ÙÙ
ا٠this باشد â Ø²Ù
اÙÛ Ø§ÛÙ Ø§ØªÙØ§Ù Ù
ÛâØ§ÙØªØ¯ ک٠دÙÛÙØ§ رÙÛ Ø®ÙØ¯ <form> Ú©ÙÛÚ© Ø´ÙØ¯.
جÙÙÚ¯ÛØ±Û از Ø¨Ø§ÙØ§Ø±ÙتÙ
ÛÚ© اÛÙÙØª Ø¨Ø§ÙØ§Ø±ÙÙØ¯Ù از Ø¹ÙØµØ± ÙØ¯Ù Ù
ستÙÛÙ
ا Ø¨Ù Ø¨Ø§ÙØ§ ØØ±Ú©Øª Ù
ÛâÚ©ÙØ¯. Ù
عÙ
ÙÙØ§ تا <html> Ø¨Ø§ÙØ§ Ù
ÛâØ±ÙØ¯Ø سپس ب٠شئ document Ù
ÛâØ±Ø³Ø¯. Ø¨Ø¹Ø¶Û Ø§Ø² رÙÛØ¯Ø§Ø¯Ùا ØØªÛ ب٠window ÙÙ
Ù
ÛâØ±Ø³ÙØ¯Ø Ù ÙÙ
Ù Ú©ÙØªØ±ÙâÚ©ÙÙØ¯ÙâÙØ§ را در Ø±Ø§Ù Ø®ÙØ¯Ø´ صدا Ù
ÛâØ²ÙÙØ¯.
ا٠ا ÙØ± Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ùâ Ù ÛâØªÙØ§Ùد تص٠ÛÙ Ø¨Ú¯ÛØ±Ø¯ ک٠رÙÛØ¯Ø§Ø¯ Ú©Ø§Ù ÙØ§ پردازش Ø´Ø¯Ù Ù Ø¨Ø§ÙØ§Ø±Ùت٠را ٠تÙÙÙ Ú©ÙØ¯.
Ù
ØªØ¯Û Ú©Ù Ø¨Ø±Ø§Û Ø§ÛÙâ کار Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâØ´ÙØ¯ âevent.stopPropagation() است.
Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ اÛÙØ¬Ø§ body.onclick در ØµÙØ±ØªÛ ک٠رÙÛ <button> Ú©ÙÛÚ© Ø´ÙØ¯ عÙ
Ù ÙÙ
ÛâÚ©ÙØ¯:
<body onclick="alert(`رÙÛØ¯Ø§Ø¯ ب٠اÛÙØ¬Ø§ ÙÙ
ÛâØ±Ø³Ø¯`)">
<button onclick="event.stopPropagation()">Ú©ÙÛÚ© Ú©ÙÛØ¯</button>
</body>
اگر Ú©Ù ÛÚ© Ø¹ÙØµØ± ÚÙØ¯ Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù Ø¨Ø±Ø§Û ÛÚ© رÙÛØ¯Ø§Ø¯ Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´Ø¯Ø Ø¯Ø± ØµÙØ±ØªÛ Ú©Ù ØØªÛ ÛÚ©Û Ø§Ø² Ø¢ÙÙØ§ از Ø¨Ø§ÙØ§Ø±Ùت٠رÙÛØ¯Ø§Ø¯ جÙÙÚ¯ÛØ±Û Ú©ÙØ¯Ø بÙÛ٠باز Ù٠اجرا Ù ÛâØ´ÙÙØ¯.
ب٠عبارت دÛÚ¯Ø±Ø event.stopPropagation() ØØ±Ú©Øª Ø±Ù Ø¨Ù Ø¨Ø§ÙØ§ را Ù
تÙÙÙ Ù
ÛâÚ©ÙØ¯Ø اÙ
ا رÙÛ ÙÙ
ÛÙ Ø¹ÙØµØ± ÙØ¹ÙÛØ بÙÛÙ Ú©ÙØªØ±ÙâÚ©ÙÙØ¯ÙâÙØ§ اجرا Ù
ÛâØ´ÙÙØ¯.
Ø¨Ø±Ø§Û ØªÙÙÙ Ø¨Ø§ÙØ§Ø±Ùت٠٠جÙÙÚ¯ÛØ±Û از Ø§Ø¬Ø±Ø§Û Ø¨ÙÛÙ Ú©ÙØªØ±ÙâÚ©ÙÙØ¯ÙâÙØ§ Ø¹ÙØµØ± ÙØ¹ÙÛØ ÛÚ© Ù
تد Ø¨Ù ÙØ§Ù
event.stopImmediatePropagation() ÙØ¬Ùد دارد. بعد از Ø¢Ù ÙÛÚ Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù دÛÚ¯Ø±Û Ø§Ø¬Ø±Ø§ ÙÙ
ÛâØ´ÙØ¯.
Ø±ÙØªØ§Ø± Ø¨Ø§ÙØ§Ø±Ùت٠ساد٠است. بدÙÙ ÛÚ© ÙÛØ§Ø² ÙØ§ÙØ¹Û Ø¢ÙØ±Ø§ ٠تÙÙÙ ÙÚ©ÙÛØ¯: بدÛÙÛ Ù Ø§Ø² ÙØ¸Ø± Ù Ø¹Ù Ø§Ø±Û Ø®ÙØ¨ ØªØ¯Ø¨ÛØ± شد٠باشد.
Ø¨Ø¹Ø¶Û Ø§ÙÙØ§Øª event.stopPropagation() ÛÚ© Ù
Ø´Ú©ÙÛ Ø§ÛØ¬Ø§Ø¯ Ù
ÛâÚ©ÙØ¯ Ú©Ù Ù
Ù
ک٠است بعدا باعث ÙÙÙØ¹ Ø¯Ø±Ø¯Ø³Ø±ÙØ§ÛÛ Ø´ÙØ¯.
Ø¨Ø±Ø§Û Ù Ø«Ø§Ù:
- Ù
ا ÛÚ© Ù
ÙÙÛ ØªÙ Ø¯Ø± ØªÙ Ø§ÛØ¬Ø§Ø¯ Ù
ÛâÚ©ÙÛÙ
. ÙØ± Ø²ÛØ±Ù
ÙÙ Ú©ÙÛÚ©âÙØ§ را رÙÛ Ø¹ÙØ§ØµØ± Ú©ÙØªØ±Ù Ù
ÛâÚ©ÙØ¯ Ù
stopPropagationرا صدا Ù ÛâØ²ÙØ¯ پس Ù ÙÙÛ Ø¨ÛØ±ÙÙÛ ÙØ¹Ø§Ù ÙÙ ÛâØ´ÙØ¯. - بعدا تصÙ
ÛÙ
Ù
ÛâÚ¯ÛØ±ÛÙ
Ø¨Ø±Ø§Û Ù¾ÛâÚ¯ÛØ±Û Ø±ÙØªØ§Ø± کاربر (جاÛÛ Ú©Ù Ú©Ø§Ø±Ø¨Ø± Ú©ÙÛÚ© Ù
ÛâÚ©ÙØ¯) Ú©ÙÛÚ©âÙØ§ را رÙÛ Ú©Ù Ù¾ÙØ¬Ø±Ù Ø¯Ø±ÛØ§Ùت Ú©ÙÛÙ
. Ø¨Ø¹Ø¶Û Ø§Ø² Ø³ÛØ³ØªÙ
âÙØ§Û تØÙÛ٠اÛ٠کار را Ø§ÙØ¬Ø§Ù
Ù
ÛâØ¯ÙÙØ¯. Ù
عÙ
ÙÙØ§ کد از
document.addEventListener('click'â¦)Ø¨Ø±Ø§Û Ú¯Ø±ÙØªÙ ÙÙ Ù Ú©ÙÛÚ© ÙØ§ Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâÚ©ÙØ¯. - Ø³ÛØ³ØªÙ
تØÙÛÙ Ù
ا جاÛÛ Ú©Ù Ú©ÙÛÚ©âÙØ§ ØªÙØ³Ø·
stopPropagation٠تÙÙÙ Ù ÛâØ´ÙÙØ¯ کار ÙÙ ÛâÚ©ÙØ¯. Ù ØªØ§Ø³ÙØ§Ù٠٠ا ÛÚ© âÙ ØØ¯Ùد٠٠ردÙâ Ø¯Ø§Ø±ÛÙ .
Ù
عÙ
ÙÙØ§ ÙÛØ§Ø² ÙØ§ÙØ¹Û Ø¨Ù Ø¬ÙÙÚ¯ÛØ±Û از Ø±ÙØªØ§Ø± Ø¨Ø§ÙØ§Ø±Ùت٠رÙÛØ¯Ø§Ø¯Ùا ÙÛØ³Øª. Ú©Ø§Ø±Û Ú©Ù Ø¸Ø§ÙØ±Ø§ ÙÛØ§Ø² Ø¨Ù Ø¢Ù Ø¯Ø§Ø±Ø¯Ø Ù
Ù
ک٠است با Ø±ÙØ´âÙØ§Û دÛگر ÙØ§Ø¨Ù ØÙ باشد. ÛÚ©Û Ø§Ø² Ø¢ÙÙØ§ Ø§Ø³ØªÙØ§Ø¯Ù از رÙÛØ¯Ø§Ø¯ÙØ§Û Ø¯Ø³ØªÛ Ø§Ø³Øª ک٠بعدا ب٠آÙÙØ§ Ù
ÛâپردازÛÙ
. ÙÙ
ÚÙÛÙ Ù
ÛâØªÙØ§ÙÛÙ
در ÛÚ© Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù Ø§Ø·ÙØ§Ø¹Ø§ØªÛ را داخ٠شئ event بÙÙÛØ³ÛÙ
٠در Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù دÛÚ¯Ø±Û Ø¢Ù Ø§Ø·ÙØ§Ø¹Ø§Øª را Ø¨Ø®ÙØ§ÙÛÙ
. سپس Ø¢ÙØ±Ø§ Ø¨Ù Ø¨Ù Ú©ÙØªØ±ÙâÚ©ÙÙØ¯ÙâÙØ§ÛÛ Ú©Ù Ø±ÙÛ Ø¹ÙØ§ØµØ± ÙØ§Ùد ÙØ³ØªÙد Ø¨ÙØ±Ø³ØªÛÙ
. با اÛÙکار.
Ú¯Ø±ÙØªÙ
ÛÚ© ÙØ§Ø² دÛگر در پردازش رÙÛØ¯Ø§Ø¯Ùا ÙØ¬Ùد دارد Ø¨Ù ÙØ§Ù âÚ¯Ø±ÙØªÙâ ÛØ§ âcapturingâ. Ø¨Ù ÙØ¯Ø±Øª در کد ÙØ§ÙØ¹Û Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâØ´ÙØ¯Ø ا٠ا گاÙÛ Ø§ÙÙØ§Øª کارآ٠د است.
رÙÛØ¯Ø§Ø¯âÙØ§Û DOM Ø§Ø³ØªØ§ÙØ¯Ø§Ø±Ø¯ Ø³Ù ÙØ§Ø² از Ø§ÙØªØ´Ø§Ø± رÙÛØ¯Ø§Ø¯ ٠عرÙÛ Ù ÛâÚ©ÙÙØ¯:
- ÙØ§Ø² Ú¯Ø±ÙØªÙ â Ø±ÙÛØ¯Ø§Ø¯ پاÛÛÙ Ù ÛâØ±ÙØ¯ تا Ø¨Ù Ø¹ÙØµØ± برسد.
- ÙØ§Ø² ÙØ¯Ù â Ø±ÙÛØ¯Ø§Ø¯ Ø¨Ù Ø¹ÙØµØ± ÙØ¯Ù Ù ÛâØ±Ø³Ø¯.
- ÙØ§Ø² Ø¨Ø§ÙØ§Ø±ÙØªÙ â Ø±ÙÛØ¯Ø§Ø¯ از Ø¹ÙØµØ± Ø¨Ø§ÙØ§ Ù ÛâØ±ÙØ¯.
اÛÙ ÛÚ© عکس از ÛÚ© Ú©ÙÛÚ© رÙÛ <td> داخ٠ÛÚ© جدÙÙ Ø§Ø³ØªØ Ú©Ù Ø´Ø§Ù
Ù Ù
شخصات Ø²ÛØ± است
اÛÙÚ¯ÙÙÙ Ú©Ù: Ø¨Ø±Ø§Û ÛÚ© Ú©ÙÛÚ© رÙÛ <td> رÙÛØ¯Ø§Ø¯ اÙ٠از Ø²ÙØ¬Ûر٠اجداد پاÛÛÙ Ù
ÛâØ¢ÛØ¯ تا Ø¨Ù Ø¹ÙØµØ± برسدâ(Ú¯Ø±ÙØªÙ). بعد Ø¨Ù Ø¹ÙØµØ± ÙØ¯Ù Ù
ÛâØ±Ø³Ø¯ ٠بعد Ø¨Ø§ÙØ§ Ù
ÛâØ±ÙØ¯ (Ø¨Ø§ÙØ§Ø±ÙتÙ) Ù Ú©ÙØªØ±ÙâÚ©ÙÙØ¯ÙâÙØ§ را در Ù
Ø³ÛØ± صدا Ù
ÛâØ²ÙØ¯.
ÙØ¨Ùا تÙÙØ§ Ø¯Ø±Ø¨Ø§Ø±Ù Ø¨Ø§ÙØ§Ø±Ùت٠رÙÛØ¯Ø§Ø¯ ØµØØ¨Øª کردÛÙ Ø ÚÙÙ Ú©Ù ÙØ§Ø² Ú¯Ø±ÙØªÙ Ø¨Ù ÙØ¯Ø±Øª Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâØ´ÙØ¯. ٠ع٠ÙÙØ§ Ø¨Ø±Ø§Û Ù Ø§ ÙÙ Ø§ÛØ§Ù ÙÛØ³Øª.
Ú©ÙØªØ±ÙâÚ©ÙÙØ¯ÙâÙØ§ÛÛ Ú©Ù Ø¨Ø§ Ø§Ø³ØªÙØ§Ø¯Ù از Ø®Ø§ØµÛØª on<event> ÛØ§ ØµÙØªâÙØ§Û HTML ÛØ§ با Ù
تد با Ø¯Ù ÙØ±ÙØ¯Û addEventListener(event, handler) اضاÙÙ Ù
ÛâØ´ÙÙØ¯Ø ÚÛØ²Û Ø¯Ø±Ø¨Ø§Ø±Ù Ú¯Ø±ÙØªÙ ÙÙ
ÛâØ¯Ø§ÙÙØ¯. ÙÙØ· در ÙØ§Ø²ÙØ§Û Ø¯ÙÙ
٠سÙÙ
اجرا Ù
ÛâØ´ÙÙØ¯.
Ø¨Ø±Ø§Û Ú¯Ø±ÙØªÙ ÛÚ© رÙÛØ¯Ø§Ø¯ در ÙØ§Ø² Ú¯Ø±ÙØªÙØ Ø¨Ø§ÛØ¯ Ú©Ù ÙØ±ÙØ¯Û Ø³ÙÙ
addEventListener را true ÙØ±Ø§Ø± دÙÛÙ
.
elem.addEventListener(..., {capture: true})
// or, just "true" is an alias to {capture: true}
elem.addEventListener(..., true)
Ø¨Ø±Ø§Û Ø¢Ø®Ø±ÛÙ ÙØ±ÙØ¯Û Ú©Ù Ø§Ø®ØªÛØ§Ø±Û Ø¯Ù Ù ÙØ¯Ø§Ø± Ù ÛâØªÙØ§Ùد ÙØ¬Ùد داشت٠باشد:
- اگر
falseباشد (Ù¾ÛØ´âÙØ±Ø¶)Ø Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù در ÙØ§Ø² Ø¨Ø§ÙØ§Ø±Ùت٠٠شخص Ù ÛâØ´ÙØ¯. - اگر
trueØ¨Ø§Ø´Ø¯Ø Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù در ÙØ§Ø² Ú¯Ø±ÙØªÙ ٠شخص Ù ÛâØ´ÙØ¯.
ØªÙØ¬Ù Ú©ÙÛØ¯ Ú©Ù ÙÙÚ¯Ø§Ù Û Ø±Ø³Ù Ø§ Ø³Ù ÙØ§Ø² ÙØ¬Ùد Ø¯Ø§Ø±Ø¯Ø ÙØ§Ø² دÙÙ (âÙØ§Ø² ÙØ¯Ùâ: رÙÛØ¯Ø§Ø¯ Ø¨Ù Ø¹ÙØµØ± ÙØ¯Ù Ø±Ø³ÛØ¯Ù است) Ø¨Ù ØµÙØ±Øª جداگاÙÙ Ú©ÙØªØ±Ù ÙÙ ÛâØ´ÙØ¯: Ú©ÙØªØ±ÙâÚ©ÙÙØ¯ÙâÙØ§Û ÙØ± Ø¯Ù ÙØ§Ø² Ú¯Ø±ÙØªÙ Ù Ø¨Ø§ÙØ§ Ø±ÙØªÙ در اÛÙ ÙØ§Ø² ÙØ±Ø§Ø®ÙاÙÛ Ù ÛâØ´ÙÙØ¯.
اگر رÙÛ ÛÚ© Ø¹ÙØµØ± ÙØ¯Ù Ú©ÙØªØ±ÙâÚ©ÙÙØ¯ÙâÙØ§Û Ú¯Ø±ÙØªÙ Ù Ø¨Ø§ÙØ§Ø±ÙØªÙ ØªÙØ¸ÛÙ Ø´ÙØ¯Ø Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù Ú¯Ø±ÙØªÙØ Ø¢Ø®Ø±Û٠اجرا در ÙØ§Ø² Ú¯Ø±ÙØªÙ اجرا Ù ÛâØ´ÙØ¯ Ù Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù Ø¨Ø§ÙØ§Ø±ÙØªÙØ اÙÙÛ٠اجرا در ÙØ§Ø² Ø¨Ø§ÙØ§Ø±Ùت٠اجرا Ù ÛâØ´ÙØ¯.
Ø¨ÛØ§ÛÛØ¯ تا در ع٠٠ببÛÙÛÙ :
<style>
body * {
margin: 10px;
border: 1px solid blue;
}
</style>
<form>FORM
<div>DIV
<p>P</p>
</div>
</form>
<script>
for(let elem of document.querySelectorAll('*')) {
elem.addEventListener("click", e => alert(`Ú¯Ø±ÙØªÙ: ${elem.tagName}`), true);
elem.addEventListener("click", e => alert(`Ø¨Ø§ÙØ§Ø±ÙتÙ: ${elem.tagName}`));
}
</script>
اÛ٠کد رÙÛ ÙØ± Ø¹ÙØµØ± ÛÚ© Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù Ú©ÙÛÚ© ØªÙØ¸ÛÙ Ù ÛâÚ©ÙØ¯ تا ببÛÙÛ٠کدا٠ÛÚ© کار Ù ÛâÚ©ÙÙØ¯.
اگر رÙÛ <p> Ú©ÙÛÚ© Ú©ÙÛÙ
Ø Ø¨Ø¹Ø¯ ØªØ±ØªÛØ¨ ب٠اÛÙ ØµÙØ±Øª است:
HTMLâBODYâFORMâDIV -> P(ÙØ§Ø² Ú¯Ø±ÙØªÙ, اÙÙÛÙ Ø´ÙÙÙØ¯Ù):PâDIVâFORMâBODYâHTML(ÙØ§Ø² Ø¨Ø§ÙØ§Ø±ÙتÙ, Ø´ÙÙÙØ¯Ù دÙÙ ).
ØªÙØ¬Ù Ú©ÙÛØ¯ Ú©Ù P Ø¯ÙØ¨Ø§Ø± ÙÙ
Ø§ÛØ´ داد٠Ù
ÛâØ´ÙØ¯: در Ù¾Ø§ÛØ§Ù Ú¯Ø±ÙØªÙ ٠در زÙ
Ø§Ù Ø´Ø±ÙØ¹ Ø¨Ø§ÙØ§Ø±ÙتÙ.
Ø®Ø§ØµÛØª event.eventPhase ب٠Ù
ا Ø´Ù
Ø§Ø±Ù ÙØ§Ø²Û ک٠در آ٠رÙÛØ¯Ø§Ø¯ ÙØ±Ø§Ø®ÙاÙÛ Ø´Ø¯Ù Ø±Ø§ Ù
ÛâÚ¯ÙÛØ¯. اÙ
ا Ø¨Ù ÙØ¯Ø±Øª Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâØ´ÙØ¯ ÚÙÙ Ù
عÙ
ÙÙØ§ در Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù Ø¢ÙØ±Ø§ Ù
ÛâØ¯Ø§ÙÛÙ
.
removeEventListener Ø¨Ù ÙØ§Ø² Ûکسا٠ÙÛØ§Ø² دارداگر Ù
ا addEventListener(..., true) را ÙØ±Ø§Ø®ÙاÙÛ Ú©ÙÛÙ
Ø Ø³Ù¾Ø³ Ø¨Ø§ÛØ¯ ÙØ§Ø² Ûکسا٠را در removeEventListener(..., true) ذکر Ú©ÙÛÙ
تا Ø¨Ù Ø¯Ø±Ø³ØªÛ Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù را ØØ°Ù Ú©ÙÛÙ
.
اگر Ù
ا ÚÙØ¯ Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù رÙÛØ¯Ø§Ø¯ رÙÛ ÛÚ© ÙØ§Ø² داشت٠باشÛÙ
Ø Ú©Ù Ø¨Ø§ addEventListener ب٠ÛÚ© اÙÙ
ا٠داد٠شدÙâØ§ÙØ¯Ø آ٠را دÙÛÙØ§ با ØªØ±ØªÛØ¨ Ø§ÛØ¬Ø§Ø¯ شد٠اجرا Ù
ÛâØ´ÙÙØ¯:
elem.addEventListener("click", e => alert(1)); // تضÙ
ÛÙ Ù
ÛâØ´ÙØ¯ ک٠اÙÙ ÙØ¹Ø§Ù Ø´ÙØ¯
elem.addEventListener("click", e => alert(2));
event.stopPropagation() در ØÛÙ Ú¯Ø±ÙØªÙ از Ø¨Ø§ÙØ§Ø±ÙØªÙ ØØ¨Ø§Ø¨Û جÙÙÚ¯ÛØ±Û Ù
ÛâÚ©ÙØ¯Ù
تد event.stopPropagation() Ù ÙÙ
زاد Ø®ÙØ¯ event.stopImmediatePropagation() Ù
ÛâØªÙØ§ÙÙØ¯ در ÙØ§Ø² Ú¯Ø±ÙØªÙ ÙÙ
ÙØ±Ø§Ø®ÙاÙÛ Ø´ÙÙØ¯. سپس Ù٠تÙÙØ§ Ú¯Ø±ÙØªÙ Ø¨ÛØ´ØªØ± Ù
تÙÙÙ Ù
ÛâØ´ÙØ¯ بÙÚ©Ù Ø¨Ø§ÙØ§Ø±ÙØªÙ ØØ¨Ø§Ø¨Û ÙÙ
ÙÙ
ÛÙØ·Ùر.
Ø¨Ù Ø¹Ø¨Ø§Ø±ØªÛ Ø¯ÛÚ¯Ø±Ø Ù
عÙ
ÙÙØ§ رÙÛØ¯Ø§Ø¯ ابتدا پاÛÛÙ Ù
ÛâØ±ÙØ¯ (Â«Ú¯Ø±ÙØªÙ») ٠سپس Ø¨Ø§ÙØ§ (Â«Ø¨Ø§ÙØ§Ø±ÙØªÙ ØØ¨Ø§Ø¨Û»). اÙ
ا اگر event.stopPropagation() در ØÛÙ ÙØ§Ø² Ú¯Ø±ÙØªÙ ÙØ±Ø§Ø®ÙاÙÛ Ø´ÙØ¯Ø سپس Ø³ÙØ± رÙÛØ¯Ø§Ø¯ Ù
تÙÙÙ Ù
ÛâØ´ÙØ¯ Ù ÙÛÚ Ø¨Ø§ÙØ§Ø±ÙØªÙ ØØ¨Ø§Ø¨Û Ø§ØªÙØ§Ù ÙÙ
ÛâØ§ÙØªØ¯.
Ø®ÙØ§ØµÙ
رÙÙØ¯ Ú©ÙØªØ±Ù رÙÛØ¯Ø§Ø¯:
- پس رÙÛØ¯Ø§Ø¯ از Ø±ÛØ´Ù ک٠شئ document است ب٠پاÛÛÙ ØØ±Ú©Øª Ù
ÛâÚ©ÙØ¯ تا بÙ
event.targetØ¨Ø±Ø³Ø¯Ø Ø¯Ø± ØÛÙ ØØ±Ú©Øª Ú©ÙØªØ±ÙâÚ©ÙÙØ¯ÙâÙØ§ÛÛ Ú©Ù Ø¨Ø§addEventListener(..., true)ØªÙØ¸Û٠شدÙâØ§ÙØ¯ را صدا Ù ÛâØ²ÙØ¯ (trueÙ Ø®ÙÙ â{capture: true}). - سپس Ú©ÙØªØ±ÙâÚ©ÙÙØ¯ÙâÙØ§Û رÙÛ Ø®ÙØ¯ ÙØ¯Ù صدا زد٠٠ÛâØ´ÙÙØ¯.
- سپس رÙÛØ¯Ø§Ø¯ Ø¨Ø§ÙØ§ Ù
ÛâØ±ÙØ¯ ٠از
event.targetØ¨Ù Ø±ÛØ´Ù Ù ÛâØ±ÙØ¯Ø Ú©ÙØªØ±ÙâÚ©ÙÙØ¯ÙâÙØ§ÛÛ Ú©Ù Ø¨Ø§ Ø§Ø³ØªÙØ§Ø¯Ù ازon<event>Ø ØµÙØªâÙØ§Û HTML Ù âaddEventListenerبدÙÙ ÙØ±ÙØ¯Û Ø³ÙÙ ÛØ§ با ÙØ±ÙØ¯Û Ø³ÙÙ Ø¨Ù ØµÙØ±Øªfalse/{capture:false}در Ù Ø³ÛØ± Ø®ÙØ¯ ÙØ±Ø§ Ù ÛâØ®ÙØ§Ùد.
ÙØ± Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù Ø¨Ù Ø®ØµÙØµÛات ÛÚ© شئ event Ø¯Ø³ØªØ±Ø³Û Ø¯Ø§Ø±Ø¯:
event.targetâ Ø¹Ù ÛÙâØªØ±ÛÙ Ø¹ÙØµØ±Û ک٠رÙÛØ¯Ø§Ø¯ را Ø§ÛØ¬Ø§Ø¯ کردÙ.event.currentTarget(=this) â Ø¹Ùصر ÙØ¹ÙÛ Ú©Ù Ø±ÙÛØ¯Ø§Ø¯ را Ú©ÙØªØ±Ù Ù ÛâÚ©ÙØ¯ (Ø¹ÙØµØ±Û Ú©Ù Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù رÙÛ Ø¢Ù Ø§Ø³Øª)event.eventPhaseâ ÙØ§Ø² Ú©ÙÙÙÛâ (Ú¯Ø±ÙØªÙ=1Ø Ø¨Ø§ÙØ§Ø±ÙتÙ=3)
ÙØ± Ú©ÙØªØ±ÙâÚ©ÙÙØ¯ÙâØ§Û Ù
ÛâØªÙØ§Ùد رÙÛØ¯Ø§Ø¯ را با event.stopPropagation() Ù
تÙÙÙ Ú©ÙØ¯Ø اÙ
ا اÛÙ Ø±ÙØ´ Ù¾ÛØ´ÙÙØ§Ø¯ ÙÙ
ÛâØ´ÙØ¯ ÚÙÙ Ú©Ù ÙÙ
ÛØ´Ù Ù
Ø·Ù
ئ٠ÙÛØ³ØªÛÙ
ک٠رÙÛØ¯Ø§Ø¯ را در Ù
رØÙÙâÙØ§Û Ø¨Ø§ÙØ§ØªØ± ÙÛØ§Ø² ÙØ®ÙاÙÛÙ
Ø¯Ø§Ø´ØªØ Ø´Ø§ÛØ¯ Ø¨Ø±Ø§Û Ú©Ø§Ø±ÙØ§ÛÛ Ú©Ø§Ù
ÙØ§ Ù
ØªÙØ§Ùت.
ÙØ§Ø² Ú¯Ø±ÙØªÙ Ø¨Ù ÙØ¯Ø±Øª Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâØ´ÙØ¯Ø ٠ع٠ÙÙØ§ رÙÛØ¯Ø§Ø¯Ùا را در ÙØ§Ø² Ø¨Ø§ÙØ§Ø±ÙØªÙ Ú©ÙØªØ±Ù Ù ÛâÚ©ÙÛÙ . Ù ÛÚ© Ù ÙØ·Ù پشت آ٠است.
در دÙÛØ§Û ÙØ§ÙØ¹ÛØ ز٠اÙÛ Ú©Ù ØªØµØ§Ø¯ÙÛ Ø±Ø®â Ù ÛØ¯ÙØ¯Ø Ù ÙØ§Ù ات Ù ØÙÛ Ø²ÙØ¯ØªØ± عکس Ø§ÙØ¹Ù Ù ÙØ´Ø§Ù Ù ÛâØ¯ÙÙØ¯. Ø¢ÙÙØ§ Ø¨ÙØªØ± از ÙØ± کس دÛÚ¯Ø±Û Ø¯Ø±Ø¨Ø§Ø±Ù Ù ØÙÛ Ú©Ù Ø§ÛÙ ØØ§Ø¯Ø«Ù رخ Ø¯Ø§Ø¯Ù Ø§Ø·ÙØ§Ø¹Ø§Øª Ø¯Ø§Ø±ÙØ¯. بعد از Ø¢ÙÙØ§ در ØµÙØ±Øª ÙÛØ§Ø² Ù ÙØ§Ù ات Ø¨Ø§ÙØ§ØªØ±.
Ø¨Ø±Ø§Û Ú©ÙØªØ±ÙâÚ©ÙÙØ¯ÙâÙØ§Û رÙÛØ¯Ø§Ø¯Ùا ÙÛØ² ب٠ÙÙ
Û٠شک٠است. Ú©Ø¯Û Ú©Ù ÛÚ© Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù Ø¨Ø±Ø§Û ÛÚ© Ø¹ÙØµØ± Ø¨Ù Ø®ØµÙØµ اختصاص Ù
ÛâØ¯ÙØ¯Ø Ø¨ÛØ´ØªØ±ÛÙ Ø¬Ø²Ø¦ÛØ§Øª را Ø¯Ø±Ø¨Ø§Ø±Ù Ø¢Ù Ø¹ÙØµØ± Ù Ú©Ø§Ø±Û Ú©Ù Ø§ÙØ¬Ø§Ù
Ù
ÛâØ¯ÙØ¯ Ù
ÛâØ¯Ø§ÙØ¯. Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù رÙÛ ÛÚ© <td> Ø¨Ù Ø®ØµÙØµ Ù
Ù
ک٠است ÙÙØ· Ø¨Ø±Ø§Û Ø¯ÙÛÙØ§ ÙÙ
ا٠<td> Ù
ÙØ§Ø³Ø¨ Ø¨Ø§Ø´Ø¯Ø ÙÙ
Ù ÚÛØ² را دربار٠آ٠Ù
ÛâØ¯Ø§ÙØ¯. پس اÙÙÛÙ Ù
ÙÙØ¹Ûت را Ø¨Ø§ÛØ¯ داشت٠باشد. بعد اÙÙÛÙ ÙØ§Ùد ا٠ÙÙ
ÚÙÛ٠دربار٠Ù
ÙØ§ÙÛÙ
Ø§Ø·ÙØ§Ø¹Ø§Øª Ø¯Ø§Ø±Ø¯Ø Ø§Ù
ا Ù
ÙØ¯Ø§Ø±Û Ú©Ù
تر Ù ÙÙ
ÛÙØ·Ùر تا Ø¨Ø§ÙØ§ØªØ±ÛÙ Ø¹ÙØµØ±Û Ú©Ù Ù
ÙØ§ÙÛÙ
Ú©ÙÛ Ø±Ø§ Ù
ÛâØ¯Ø§ÙØ¯ ٠آخرÛÙ Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù را اجرا Ù
ÛâÚ©ÙØ¯.
Ø¨Ø§ÙØ§Ø±ÙØªÙ Ù Ú¯Ø±ÙØªÙ پاÛÙâÚ¯Ø°Ø§Ø±Û Ø¨Ø±Ø§Û âÙØ§Ú¯Ø°Ø§Ø±Û رÙÛØ¯Ø§Ø¯â ÙØ³ØªÙد. â ÛÚ© اÙÚ¯ÙÛ Ø¨Ø³ÛØ§Ø± ÙØ¯Ø±ØªÙ ÙØ¯ Ø¨Ø±Ø§Û Ú©ÙØªØ±Ù رÙÛØ¯Ø§Ø¯âÙØ§ ک٠در بخشâÙØ§Û Ø¨Ø¹Ø¯Û Ø¢Ù ÙØ²Ø´ Ø®ÙØ§ÙÛÙ Ø¯ÛØ¯.
ÙØ¸Ø±Ø§Øª
<code>Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯Ø Ø¨Ø±Ø§Û ÚÙØ¯Û٠خط â کد را درÙ٠تگ<pre>ÙØ±Ø§Ø± دÙÛØ¯Ø Ø¨Ø±Ø§Û Ø¨ÛØ´ از د٠خط کد â Ø§Ø² ÛÚ© جعبÙÙ Ø´ÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯. (plnkrØ jsbinØ codepenâ¦)