اذهب إلى المحتوى

السؤال

نشر

أواجه مشكلة غريبة ولا أفهم سببها وهي عند الضغط على العنصر li وكأنني أيضا ضغطت على ul أيضا

import React from 'react';

export default function App() {
  return (
    <ul
      onClick={(e) => {
        console.log('parent');
      }}
    >
      <li
        onClick={(e) => {
          console.log('child1');
        }}
      >
        list1
      </li>
      <li
        onClick={(e) => {
          console.log('child2');
        }}
      >
        item2
      </li>
    </ul>
  );
}

عند الضغط على list1 أجد

child1
parent

 

Recommended Posts

  • 0
نشر

هذا طبيعي فهذا ما يسمى بال event ولأن ال li عنصر داخلي لل ul فلذلك عند الضغط عليه سيمرر حدث ليقوم الأب بتنفيذ ال onClick الخاصة به ولكن إذا لم تكن تريد هذا وتريد منع وصول ال event من الطفل إلى الأب فقط قم بما يلي لعناصر ال li
 

<li
 onClick={(e) => {
  e.stopPropagation(); // هذا السطر سيمنع مرور الحدث من الطفل إلى الأب
  console.log('child1');
 }}
 >
  list1
</li>

 

  • 0
نشر

في جافاسكريبت يوجد مصطلحين يسميان event bubbling و event capturing و هما طريقتين مختلفتين لل propagation في ال HTML DOM API، فعندما يقه أي حدث event على عنصر بداخل عنصر آخر و كلا العنصرين يتعاملان/يستمعان لهذا الحدث و يتخذان إجراء عند حدوثه. ال event propagation mode يحدد الترتيب الذي ستقوم العناصر باستلام الحدث به.

 

ففي حالة ال bubbling، يتم التقاط الحدث و التعامل معه بواسطة العنصر الداخلي أولًا و بعدها يتم التقدم إلى العناصر الخارجية.

 

أمّا في حالة ال capturing، فيتم التقاط الحدث و التعامل معه بواسطة العنصر الخارجي أولًا و بعدها يتم التقدم إلى العناصر الداخلية. و هذا ما يحدث بصورة افتراضية في js 

 

و لإيقاف هذا التأثير نقوم باستخدام الدالة التالية داخلة تابع التعامل مع الحدث:

e.stopPropagation()

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...