דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. הסרת מאזין לאלמנט (mouseenter) - מציאת הhandleEvent

הסרת מאזין לאלמנט (mouseenter) - מציאת הhandleEvent

מתוזמן נעוץ נעול הועבר תכנות
5 פוסטים 3 כותבים 122 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • צדיק תמיםצ מנותק
    צדיק תמיםצ מנותק
    צדיק תמים
    כתב ב נערך לאחרונה על ידי צדיק תמים
    #1

    אני מעוניין להסיר את האזנה לאירוע שמתבצע בכניסת אל אלמנט מסוים (mouseenter).
    רקע: בעיצוב החדש של ג'ימייל, יש בצד ימין 3 כפתורים:
    1f810710-6465-4e0a-86f8-db9f81ad9aef-image.png
    בריחוף על 2 המצבים האחרים - הלא פעילים כרגע (כלומר אם נמצאים לדוגמה ב"צ'אט", אז בריחוף על "מייל" או על "מרחבים משותפים"), קופץ מעין פופ-אפ:
    fd507372-af18-4b8a-8bb1-b2329270c183-image.png
    שאותו אני מעוניין להסיר. (ניסיתי להסיר אותו באמצעות ()remove. או display: none ב-CSS, אבל הצלחתי רק לרוקן אותו מתוכן, ולא להעלים אותו...)
    מצאתי בכלי המפתחים את האירוע mouseenter הבא (היה עוד אחד, שההסרה שלו לא השפיעה):
    432d5cb5-c846-43b7-b261-b137fdf4fccd-image.png
    שאם אני לוחץ על הכפתור של remove - הפופאפ באמת לא מופיע. אבל אני צריך לעשות את זה בJS, לא ידני דרך הקונסול כל פעם מחדש...
    ב-MDN מופיע שצריך להעביר ל-removeEventListener כארגומנט שני את הlinster (מאזין). ממה שהבנתי, הכוונה לפונקציה שמתבצעת כשהאירוע מתבצע. השאלה איך אני מוצא את השם של הפונקציה הזו?
    זה הקוד כרגע:

    document.querySelector('[class="V6 CL V2"]').removeEventListener("mouseenter", handleMouseDown, false);
    

    לכידת האלמנט, והסרת המאזין. ארגומנט ראשון שמועבר למסיר זה סוג האירוע (mouseenter), והאחרון זה false ל-useCapture, כפי שמופיע בכלי המפתחים:
    8b35216c-5470-4c28-a6fc-7cb72f1b1821-image.png
    השאלה איך אני מקבל את שם הפונקציה? מה שצריך לבוא במקום handleMouseDown...
    תודה רבה!!

    Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
    טיפים

    מוטי אורןמ תגובה 1 תגובה אחרונה
    0
    • מוטי אורןמ מנותק
      מוטי אורןמ מנותק
      מוטי אורן
      השיב לצדיק תמים ב נערך לאחרונה על ידי
      #2

      @צדיק-תמים אתה יכול להשתמש במתודה stopPropagation, שעוצרת את ההתפשטות של האירוע הזה.

      דוגמת שימוש:

      document.querySelector('[class="V6 CL V2"]').addEventListener('mouseenter', (event) => {
        event.stopPropagation();
      });
      
      צדיק תמיםצ תגובה 1 תגובה אחרונה
      0
      • צדיק תמיםצ מנותק
        צדיק תמיםצ מנותק
        צדיק תמים
        השיב למוטי אורן ב נערך לאחרונה על ידי צדיק תמים
        #3

        @מוטי-אורן אני לא צריך לעצור את ההתפשטות של האירוע הזה אלא לעצור אירועים אחרים...

        It also does not prevent immediate propagation to other event-handlers. If you want to stop those, see .stopImmediatePropagation()

        ולמעשה גם עם stopImmediatePropagation:

        const element = document.querySelector('[class="V6 CL V2"]')
        element.addEventListener("mouseenter", stopEvents);
        function stopEvents() {
            element.stopImmediatePropagation()
        }
        

        זה לא עובד...
        כמו כן, יש כאן את הנקודה של התועלת ארוכת טווח - זה עוזר למקרה הזה ספציפית, אבל במקרה שאני ארצה להסיר רק מאזין אחד מתוך כמה, אני לא אוכל להשתמש בדבר כזה... וחוזרת השאלה שלמעלה, איך אני מוצא את הlinster

        Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
        טיפים

        D תגובה 1 תגובה אחרונה
        0
        • D מנותק
          D מנותק
          davidnead
          השיב לצדיק תמים ב נערך לאחרונה על ידי davidnead
          #4

          @צדיק-תמים אמר בהסרת מאזין לאלמנט (mouseenter) - מציאת הhandleEvent:

          @מוטי-אורן אני לא צריך לעצור את ההתפשטות של האירוע הזה אלא לעצור אירועים אחרים...

          It also does not prevent immediate propagation to other event-handlers. If you want to stop those, see .stopImmediatePropagation()

          ולמעשה גם עם stopImmediatePropagation:

          const element = document.querySelector('[class="V6 CL V2"]')
          element.addEventListener("mouseenter", stopEvents);
          function stopEvents() {
              element.stopImmediatePropagation()
          }
          

          זה לא עובד...
          כמו כן, יש כאן את הנקודה של התועלת ארוכת טווח - זה עוזר למקרה הזה ספציפית, אבל במקרה שאני ארצה להסיר רק מאזין אחד מתוך כמה, אני לא אוכל להשתמש בדבר כזה... וחוזרת השאלה שלמעלה, איך אני מוצא את הlinster

          הקוד לא עבד לך כי

          1. ניסית לקרוא לelement בלי שהוא קיים בתוך הפונקציה שלך.
          2. stopImmediatePropagation זו פונקציה של הevent ולא של הelementt. ולכן הקוד התקין הוא:
          const element = document.querySelector('[class="V6 CL V2"]')
          element.addEventListener("mouseenter", stopEvents);
          function stopEvents(event) {
              event.stopImmediatePropagation()
          }
          
          
          צדיק תמיםצ תגובה 1 תגובה אחרונה
          1
          • צדיק תמיםצ מנותק
            צדיק תמיםצ מנותק
            צדיק תמים
            השיב לdavidnead ב נערך לאחרונה על ידי
            #5

            @davidnead אמר בהסרת מאזין לאלמנט (mouseenter) - מציאת הhandleEvent:

            1. ניסית לקרוא לelement בלי שהוא קיים בתוך הפונקציה שלך.

            הוא מוגדר בסקופ האב, ואמור להיות חשוף לפונקציה...
            למעשה stopImmediatePropagation() לא עוצר את המאזין המובנה (של ג'ימייל). אני חושד שהסיבה היא בגלל שהוא מוגדר לפני המאזין "שלי" (שאני הוספתי).

            Don’t comment bad code — rewrite it." — Brian W. Kernighan and P. J. Plaugher"
            טיפים

            תגובה 1 תגובה אחרונה
            0

            בא תתחבר לדף היומי!
            • התחברות

            • אין לך חשבון עדיין? הרשמה

            • התחברו או הירשמו כדי לחפש.
            • פוסט ראשון
              פוסט אחרון
            0
            • דף הבית
            • קטגוריות
            • פוסטים אחרונים
            • משתמשים
            • חיפוש
            • חוקי הפורום