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

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

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

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

מתוזמן נעוץ נעול הועבר תכנות
5 פוסטים 3 כותבים 125 צפיות 4 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • צדיק תמיםצ מנותק
    צדיק תמיםצ מנותק
    צדיק תמים
    כתב ב נערך לאחרונה על ידי צדיק תמים
    #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
    • צדיק תמיםצ צדיק תמים

      אני מעוניין להסיר את האזנה לאירוע שמתבצע בכניסת אל אלמנט מסוים (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...
      תודה רבה!!

      מוטי אורןמ מנותק
      מוטי אורןמ מנותק
      מוטי אורן
      כתב ב נערך לאחרונה על ידי
      #2

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

      דוגמת שימוש:

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

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

        דוגמת שימוש:

        document.querySelector('[class="V6 CL V2"]').addEventListener('mouseenter', (event) => {
          event.stopPropagation();
        });
        
        צדיק תמיםצ מנותק
        צדיק תמיםצ מנותק
        צדיק תמים
        כתב ב נערך לאחרונה על ידי צדיק תמים
        #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
        • צדיק תמיםצ צדיק תמים

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

          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

          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
          • D davidnead

            @צדיק-תמים אמר בהסרת מאזין לאלמנט (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()
            }
            
            
            צדיק תמיםצ מנותק
            צדיק תמיםצ מנותק
            צדיק תמים
            כתב ב נערך לאחרונה על ידי
            #5

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

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

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

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

            תגובה 1 תגובה אחרונה
            0
            תגובה
            • תגובה כנושא
            התחברו כדי לפרסם תגובה
            • מהישן לחדש
            • מהחדש לישן
            • הכי הרבה הצבעות


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

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

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