جستجو برای:
  • خانه
  • دوره و کتاب
  • مقالات
    • خانواده جاوا اسکریپت
      • مقالات جاوا اسکریپت
      • مقالات ری اکت و نکست
      • هوش مصنوعی
    • خانواده فرانت
      • مقالات سی اس اس
      • مقالات اچ تی ام ال
    • محیط کار
      • سوالات استخدامی جاوا اسکریپت
      • سوالات استخدامی ری اکت
      • اصطلاحات محیط کار فرانت اند
    • مجله پرنیان
      • تصاویر دوره ها
      • نظرات دانشجویان قدیم
  • سوالات متداول
  • تماس با ما
  • خانواده پرنیان
    • چت خانه
    • دستیار هوش مصنوعی(رایگان!)
    • تایید مدارک
    • پیام یا انتقاد (ناشناس)
    • تعیین سطح زبان انگلیسی
    • پخش لایو رادیوسام
 
  • 09921632445
  • radioarsam[at]gmail.com
  • فروشگاه محصولات
  • بلاگ
  • تماس با ما
  • درباره پارسا قربانیان، موسس مدرسه پرنیان
پارسا قربانیان |گروه آموزشی پرنیان | آموزش حرفه ای طراحی سایت
  • خانه
  • دوره و کتاب
  • مقالات
    • خانواده جاوا اسکریپت
      • مقالات جاوا اسکریپت
      • مقالات ری اکت و نکست
      • هوش مصنوعی
    • خانواده فرانت
      • مقالات سی اس اس
      • مقالات اچ تی ام ال
    • محیط کار
      • سوالات استخدامی جاوا اسکریپت
      • سوالات استخدامی ری اکت
      • اصطلاحات محیط کار فرانت اند
    • مجله پرنیان
      • تصاویر دوره ها
      • نظرات دانشجویان قدیم
  • سوالات متداول
  • تماس با ما
  • خانواده پرنیان
    • چت خانه
    • دستیار هوش مصنوعی(رایگان!)
    • تایید مدارک
    • پیام یا انتقاد (ناشناس)
    • تعیین سطح زبان انگلیسی
    • پخش لایو رادیوسام
0

ورود و ثبت نام

بلاگ پرنیان

پارسا قربانیان |گروه آموزشی پرنیان | آموزش حرفه ای طراحی سایتبلاگمقالاتمقالات جاوا اسکریپتتفاوت event bubling و event capturing

تفاوت event bubling و event capturing

12 سپتامبر 2022
ارسال شده توسط مدیریت
مقالات ، مقالات جاوا اسکریپت
204 بازدید
تفاوت event bubling و event capturing

در این مقاله کوتاه قصد داریم تفاوت event bubling و event capturing را در مبحث جاوا اسکریپت با ذکر یک مثال مورد بررسی قرار دهیم.

برای درک این مفهوم باید ابتدا بدانیم که در حال یادگیری مبحث propagation در جاوااسکریپت هستیم.

فرض کنید یک المان بعنوان parent داریم که درون خود المانی دیگر بعنوان child دارد. این را هم در نظر بگیرید که روی والد و فرزند هر کدام جداگانه به تابع ست شده است.

در حالت عادی وقتی روی المان فرزند کلیک کنیم، ابتدا فانکشن مربوط به فرزند فراخوانی شده و سپس فانکشن مربوط به والد فراخوانی میشود. به این ساختار event bubling گفته میشود که بصورت دیفالت فعال است.

اما اگر المان سوم در addEventListener را از false به true تغییر دهید، به حالت event Capturing خواهیم رسید.

یعنی ابتدا فانکشن والد و سپس فانکشن فرزند فراخوانی میشود.

مانند کد زیر:

<div id="parent" class="col-4 border bg-primary" style="height: 500px">
    <div id="child" class="col-4 bg-dark" style="height: 200px"></div>
</div>
 
<script>
    document.getElementById('parent').addEventListener('click', function () {
        alert('parent clicked!')
    }, true)
    document.getElementById('child').addEventListener('click', function () {
        alert('child clicked!')
    }, true)
</script>

اما یک حالت بسیار کاربردی بنام stopPropagation و یا cancleBuble وجود دارد که اگر به event هر کدام از children ها اختصاص پیدا کند، میتواند این زنجیره را پاره کرده و دیگر اجازه فراخوانی فانکشن های والد خود را ندهد.

مانند کد زیر:

<body data-rsssl=1>
    <div id="parent" class="col-4 border bg-primary" style="height: 500px">
        <div id="child" class="col-4 bg-dark" style="height: 200px"></div>
    </div>
 
    <script>
        document.getElementById('parent').addEventListener('click', function () {
            alert('parent clicked!')
        }, false)
        document.getElementById('child').addEventListener('click', function (event) {
            alert('child clicked!')
            // event.stopImmediatePropagation()
            // event.stopPropagation()
            event.cancelBubble = true
        }, false)
    </script>

در انتهای این مقاله کوتاه تفاوت event bubling و event capturing یک مثال عملی از موضوع stopPropagation آورده شده است.

در این مثال به ازای هر کلیک بروی LI یک SPAN در داخل آن ایجاد میکنیم و بعد از کلیک روی خود SPAN میخواهیم فقط خودش حذف شود و تاثیری بروی والد خود نداشته باشد.

همانطور که در د زیر میبینید، با استفاده از stopPropagation توانستیم زنجیره و توالی انجام فانکشن والد را قطع کرده و از ایجاد بینهایت Span جلوگیری کنیم.

<body data-rsssl=1>
    <ul>
        <li data-status="off">menu</li>
        <li data-status="off">menu</li>
        <li data-status="off">menu</li>
        <li data-status="off">menu</li>
        <li data-status="off">menu</li>
    </ul>
</body>
 
<script>
    let _li = document.querySelectorAll('ul>li')
    _li.forEach((val) => {
        val.addEventListener('click', () => {
            if (val.getAttribute('data-status') == 'off') {
                val.innerHTML = val.innerHTML +
		'<span onclick="del(this, event)"> *delete</span>'
                val.setAttribute('data-status', 'on')
            }
        })
    })
    function del(x, e) {
        // console.log(x)
        e.stopPropagation()
        x.parentElement.setAttribute('data-status', 'off')
        x.style.color='red'
        x.remove()
    }
</script>

امیدواریم از این مقاله نهایت استفاده را برده باشید و آن را با دوستانتان به اشتراک بگذارید. تیم تولید محتوای مدرسه اینترنتی پرنیان این مقاله را تهیه کرده است.

اشتراک گذاری:
درباره مدیریت

شما در حال مطالعه یکی از مقالات آموزشی وبلاگ مدرسه فرانت اند پرنیان هستید. اگر برایتان مفید بود آن را با دوستانتان به اشتراک بگذارید. من پارسا قربانیان ، مدرس با سابقه برنامه نویسی و فرانت اند و اینجا مدرسه فرانت اند پرنیان، میخواهیم در یک معامله برد برد، با هم به آرزوهایمان برسیم.

نوشته های بیشتر از مدیریت
در تلگرام
کانال ما را دنبال کنید!
در اینستاگرام
ما را دنبال کنید!
در یوتوب
ما را دنبال کنید!
Created by potrace 1.14, written by Peter Selinger 2001-2017
در آپارات
ما را دنبال کنید!

مطالب زیر را حتما مطالعه کنید

Vibe Coding چیست؟ آیا آینده برنامه‌نویسی تغییر کرده است؟
Vibe Coding چیست؟ آیا آینده برنامه‌نویسی تغییر کرده است؟
MCP چیست
MCP چیست و چرا آینده برنامه‌نویسی با هوش مصنوعی را تغییر می‌دهد؟
تفاوت HTMLCollection و NodeList در جاوا اسکریپت
تفاوت HTMLCollection و NodeList در جاوا اسکریپت
State Normalization در فرانت‌اند چیست؟
State Normalization در فرانت‌اند چیست؟
حفظ روحیه برنامه نویسان در شرایط جنگی
حفظ روحیه برنامه نویسان در شرایط جنگی
خبر فوری
اطلاعیه مهم درباره شروع کلاس ها
قدیمی تر آموزش ایجاد سرچ AJAX در PHP
جدیدتر آموزش کامل axios در جاوا اسکریپت

دیدگاهتان را بنویسید لغو پاسخ

جستجو برای:
نوشته‌های تازه
  • Vibe Coding چیست؟ آیا آینده برنامه‌نویسی تغییر کرده است؟
  • MCP چیست و چرا آینده برنامه‌نویسی با هوش مصنوعی را تغییر می‌دهد؟
  • تفاوت HTMLCollection و NodeList در جاوا اسکریپت
  • State Normalization در فرانت‌اند چیست؟
  • حفظ روحیه برنامه نویسان در شرایط جنگی
دسته‌ها
دوره ها:

کلاس های درحال ثبت نام فرانت اند: 

  • دوره فرانت اند صبح از اوایل آبان
  • دوره جاوا اسکریپت و ری اکت از 31مرداد

دوره فرانت اند پرنیان

 

مدرسه فرانت اند پرنیان

گروه آموزشی پرنیان از سال 92 تاسیس شده و تاکنون ده ها دوره طراحی وب ، CMS ، سئو و بوت کمپ فرانت اند به صورت حضوری و غیر حضوری برگزار کرده است. ما در پرنیان جدیدترین و کاربردی ترین مباحث طراحی و توسعه وب ، سئو و دیجیتال مارکتینگ رو آموزش داده و راه ورود شما عزیزان به بازار کار را هموار کرده ایم.

فهرست سفارشی
  • بلاگ
  • تماس با ما
  • حساب کاربری من
  • درباره پارسا قربانیان، موسس مدرسه پرنیان
  • سبد خرید
  • فروشگاه

لوگوی مدرسه پرنیان

تمام حقوق برای مدرسه فرانت اند پرنیان محفوظ است. سیاست حفظ حریم شخصی

ورود

رمز عبور را فراموش کرده اید؟

هنوز عضو نشده اید؟ عضویت در سایت