Bubbling و Capture

مکانیسم‌های Bubbling و Capture در جاوااسکریپت

در توسعه وب، درک نحوه مدیریت رویدادها (Event Handling) یکی از مفاهیم کلیدی است. دو مکانیسم مهم در این زمینه Bubbling و Capture هستند که رفتار انتشار رویدادها در DOM را تعیین می‌کنند.


مکانیسم Capture چیست؟

در فاز Capture، رویداد از بالاترین عنصر والد (معمولاً window) شروع می‌شود و به سمت عنصر هدف (target) حرکت می‌کند. این فاز کمتر مورد استفاده قرار می‌گیرد اما برای برخی سناریوهای خاص حیاتی است.

  • رویداد از ریشه DOM شروع می‌شود
  • به ترتیب از والد به فرزند منتشر می‌شود
  • به صورت پیش‌فرض غیرفعال است

مکانیسم Bubbling چگونه کار می‌کند؟

برخلاف Capture، در Bubbling رویداد از عنصر هدف شروع شده و به سمت بالا (والدها) منتشر می‌شود. این رفتار پیش‌فرض در اکثر مرورگرها است.

ویژگی Capture Bubbling
جهت انتشار بالا به پایین پایین به بالا
پیش‌فرض خیر بله

برای یادگیری عمیق‌تر درباره رویدادها در جاوااسکریپت، می‌توانید اینجا را دنبال کنید. این منبع به شما کمک می‌کند مفاهیم را با مثال‌های عملی درک کنید.

تفاوت‌های کلیدی

  1. ترتیب اجرای رویدادها در هر فاز متفاوت است
  2. Bubbling برای Event Delegation مناسب‌تر است
  3. Capture در موارد خاص مانند اعتبارسنجی فرم‌ها کاربرد دارد

برای کنترل این رفتارها می‌توانید از متد addEventListener استفاده کنید. پارامتر سوم این متد تعیین می‌کند که از کدام فاز استفاده شود (true برای Capture و false برای Bubbling).

مثال کاربردی: اگر یک دکمه داخل یک div داشته باشید، با کلیک روی دکمه:

  • در فاز Capture: ابتدا رویداد div و سپس دکمه پردازش می‌شود
  • در فاز Bubbling: ابتدا دکمه و سپس div پردازش می‌شود

درک صحیح این مفاهیم به شما کمک می‌کند رویدادها را به صورت کارآمدتری مدیریت کنید و از مشکلات رایج مانند اجرای چندباره رویدادها جلوگیری نمایید.