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

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

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. שאילתת Jquery לא מגיבה

שאילתת Jquery לא מגיבה

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

    נתון הקוד הבא:

    <script>
         $(document).ready(function() {
             $("#myBtn").click(function() {//foo1
                 var num = $("#myInput input").val();
                 for (i = 0; i < num; i++) {
                     $("#myOutput").append($("#myBtn").html());
                     $("#myOutput #main").text(" לחצן " + (i + 1));
                     $("#myOutput #main").attr("id", "l" + (i + 1));
                 }
             });
             $("#myOutput button").click(function() {//foo2
                 alert("in button under #myOutput")
             });
         });
     </script>
    <body>
     <div id="myInput">
         <input type="text">
     </div>
     <div id="myBtn">
         <button id="main">לחץ כאן</button>
     </div>
     <div id="myOutput">
     </div>
    </body>
    

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

    השלב הבא אמור להיות שבלחיצה על אחד מהלחצנים, תקפוץ הודעת ()alert. (מסומן כ-foo2) דבר זה אמור להתבצע על ידי הסלקטור

    "#myOutput button"
    

    שכן הקוד נראה בשלב זה בצורה הבאה:

    <div id="myOutput">
            <button id="l5"> לחצן 5</button>
       ...
       ...
            <button id="l1"> לחצן 1</button>
        </div>
    

    בפועל השלב הראשון שתיארתי עובד מצויין ואכן מודפסים הלחצנים. בשלב השני משום מה הדפדפן מתעלם מהקריאה לסלקטור הנ"ל וכלל לא נכנס לפונקציה.
    מהו ההסבר לכך?
    תודה רבה.

    OdedDvirO yossizY 2 תגובות תגובה אחרונה
    0
    • OdedDvirO מנותק
      OdedDvirO מנותק
      OdedDvir
      השיב לyyy ב נערך לאחרונה על ידי OdedDvir
      #2

      @yyy אני לא מנוסה ב-JQuery, אבל אנסה בכל זאת...
      הוצאת את הקוד של פונקצית האירוע מלולאת ה for, כשלכאורה אתה צריך להצמיד אותו לכל לחצן. משהו כזה אולי:

      for (i = 0; i < num; i++) {
          $("#myOutput").append($("#myBtn").html());
          $("#myOutput #main").text(" לחצן " + (i + 1));
          $("#myOutput #main").attr("id", "l" + (i + 1));
          $("#l" + (i+1)).click(function() {//foo2
               alert("in button under #myOutput")
            }
      }
      
      תגובה 1 תגובה אחרונה
      3
      • yossizY מנותק
        yossizY מנותק
        yossiz
        השיב לyyy ב נערך לאחרונה על ידי yossiz
        #3

        @yyy כמו ש@OdedDvir התכוון להעיר, אתה מנסה לאגד event handler לאלמנטים בשעה שעוד לא נוצרו.

        אפשר לעשות את הפעולה בתוך לולאת ה-for כמו ש-@OdedDvir כתב, או יותר אלגנטי (😉 ) אחרי הלולאה אבל בתוך ‎$("#myBtn").click כאשר האלמנטים כבר קיימים :

        $(document).ready(function () {
          $("#myBtn").click(function () { //foo1
            var num = $("#myInput input").val();
            for (i = 0; i < num; i++) {
              $("#myOutput").append($("#myBtn").html());
              $("#myOutput #main").text(" לחצן " + (i + 1));
              $("#myOutput #main").attr("id", "l" + (i + 1));
            }
            $("#myOutput button").click(function () { //foo2
              alert("in button under #myOutput")
            });
          });
        });
        
        

        📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

        OdedDvirO תגובה 1 תגובה אחרונה
        4
        • OdedDvirO מנותק
          OdedDvirO מנותק
          OdedDvir
          השיב לyossiz ב נערך לאחרונה על ידי
          #4

          @yossiz אמר בשאילתת Jquery לא מגיבה:

          כמו ש@OdedDvir התכוון להעיר, אתה מנסה לאגד event handler לאלמנטים בשעה שעוד לא נוצרו.

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

          או יותר אלגנטי

          😊

          yossizY WWWW 2 תגובות תגובה אחרונה
          2
          • yossizY מנותק
            yossizY מנותק
            yossiz
            השיב לOdedDvir ב נערך לאחרונה על ידי
            #5

            @odeddvir אמר בשאילתת Jquery לא מגיבה:

            אני כעת משער שאפשר להשתמש בסלקטור גלובלי עבור כל הלחצנים, כפי שכתבת.

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

            אבל כעת אני לא מבין מה ההבדל בין הקוד שלו לשלך...

            פירמטתי אותו קצת שיהיה יותר ברור.

            📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

            תגובה 1 תגובה אחרונה
            2
            • WWWW מנותק
              WWWW מנותק
              WWW
              השיב לOdedDvir ב נערך לאחרונה על ידי
              #6

              @odeddvir אמר בשאילתת Jquery לא מגיבה:

              אבל כעת אני לא מבין מה ההבדל בין הקוד שלו לשלך...

              אצל @yyy הלחצנים נוצרים רק לאחר אירוע לחיצה על אלמנט #myBtn, והקוד שמאגד ללחצנים פונקציה, רץ מיד כשהמסמך מוכן...

              WWW.netfree@gmail.com || קשבק! החזר כספי לבנק על רכישות באינטרנט || עונים על סקרים ומרוויחים כסף!

              תגובה 1 תגובה אחרונה
              3
              • yyyY מנותק
                yyyY מנותק
                yyy
                כתב ב נערך לאחרונה על ידי
                #7

                לאחר כל הנ"ל האם יש דרך לגרום לשאילתת JQ לרוץ גם על אלמנטים שיווצרו בעתיד?

                תגובה 1 תגובה אחרונה
                1
                • dovidD מנותק
                  dovidD מנותק
                  dovid ניהול
                  כתב ב נערך לאחרונה על ידי dovid
                  #8

                  היה פעם live אבל הוא יצא משימוש, במקומו משתמשים בon על אלמנט קיים ומציינים בארגומנט השני את הסלקטור של האלמנט העתידי:

                  $(document).on('click', 'button', function() { alert($(this).text() + ' clicked!') });
                  

                  היום jQuery נחשב מיושן מעט, וקל מאוד גם בלעדיו לעשות את רוב הדברים.
                  פה למשל, קל להצמיד אירוע תוך יצירת האלמנט וזה מייתר את השאלה.

                  מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                  בכל נושא אפשר ליצור קשר dovid@tchumim.com

                  yyyY תגובה 1 תגובה אחרונה
                  3
                  • yyyY מנותק
                    yyyY מנותק
                    yyy
                    השיב לdovid ב נערך לאחרונה על ידי
                    #9

                    @dovid אמר בשאילתת Jquery לא מגיבה:

                    היה פעם live אבל הוא יצא משימוש, במקומו משתמשים בon על אלמנט קיים ומציינים בארגומנט השני את הסלקטור של האלמנט העתידי:

                    $(document).on('click', 'button', function() { alert($(this).text() + ' clicked!') });
                    

                    היום jQuery נחשב מיושן מעט, וקל מאוד גם בלעדיו לעשות את רוב הדברים.
                    פה למשל, קל להצמיד אירוע תוך יצירת האלמנט וזה מייתר את השאלה.

                    סייעת לי רבות, איש יקר.

                    תגובה 1 תגובה אחרונה
                    0
                    • dovidD dovid העביר נושא זה מ-תכנות ב-

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

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

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