שלח תשובה

זירת השאלות

1059
צפיות
7
תשובות

תפריט דינאמי ב-JS

,‏ 8 באוקטובר, 2004

שלום לכולם,

באתר שלי יש מצעד להיטים, שהוא בעצם טבלה של 10 שמות של שירים.
כאשר עומדים על אחת השורות, מופיע בתא מיוחד מימין לטבלה פרטים על השיר.

הפונקציה משתמשת ב-onMouseOver על התא בטבלה.

כל שורה במצעד נראית ככה:


<%
InfoBoxHTML = "קצת פרטים על השיר"
%>

<TR id=songInfo<%=RS("ID")%> onmouseover="movein(this,'<%=InfoBoxHTML%>)" class="normal" style="font-weight:normal">


והמידע על השיר, מתווסף בעזרת פונקציית ה-JS הבאה:


function movein(which,html){
    
which.style.background="#FCCB95"
if (document.getElementById)
    {
    document.getElementById("infobox").innerHTML=html
    }


הבעיה היא שבכל שורה במצעד, טקסטים / תמונות / כל דבר שנמצא תחת טאג כלשהו, גורם לאירוע onMouseOut להתבצע (מה שאומר שברגע שהסמן זז קצת, שוב מתרחש onMouseOver)

לדוגמא, נניח בתוך התא יש טקסט לא מפורמט.
ברגע שאני אכתוב בתוך הטקסט הזה מספר מילים בתוך <b>, אז המילים האלה ייחשבו כאילו הן לא חלק מהאובייקט, וכשהסמן יעלה עליהם, יתרחש onMouseOut לשורה, ו-onMouseOver מחדש ברגע שהסמן יזוז חזרה לשאר הטקסט.

למה זה, ואיך אני פותר את זה?
יש רעיונות…?

תגיות:

7 תשובות

  1. BuildHome הגיב:

    תשובה
    1. הודעה זו שייכת לפורום צד-לקוח.

    2. תעשה משפט תנאי פשוט שיבדוק אם הערך הקיים שווה לערך שצריך לשנות (אם הבנתי אותך נכון).
    if (document.getElementById("infobox").innerHTML!=html)
        document.getElementById("infobox").innerHTML=html

    מקווה שהבנתי אותך :-

  2. Dj NaSh הגיב:

    אני אסביר את עצמי שוב
    אני אנסה להסביר את השאלה טוב יותר:

    קחו טקסט ותחילו עליו אירוע onMouseOver, לדוגמא:


    <td onmouseout="bla(this)">טקסט כלשהו</td>

    ושימו את הסמן על הטקסט.
    ברגע שהסמן יזוז מהטקסט, תפעל הפונקציה bla.

    עכשיו, נניח והטקסט שלנו היה רשום ככה:

    <td onmouseout="bla(this)">טקסט <b>נוסף</b> כלשהו</td>

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

    אני מקווה שהבנתם את השאלה?
    עכשיו, יש למישהו רעיון…?

  3. אוריקס הגיב:

    זה כן אמור לקרות
    כל מה שבין הטאג td ל /td יפעיל לך את האירוע, ללא קשר לטאג בו הוא תחום.

  4. Dj NaSh הגיב:

    אז זהו שלא…
    זה גם מה שאני הייתי רוצה שיקרה,
    אבל זה פשוט לא קורה.

    כל דבר ב-TD שהוא גם בתוך טאג משלו נחשב כאובייקט אחר, וגורם ל-onMouseOut ל-TD.

    תנסה ותראה בעצמך…

  5. Dj NaSh הגיב:

    איזה חלק לא הבנת?
    באיזה חלק ממה שהסברתי הסתבכת?
    אני אנסה להסביר שוב בצורה יותר פשוטה:

    אתה מגדיר שתא שלם בטבלה מגיב לאירועים מסויימים שקבעת.
    לעומת זאת, יש חלקים מהטקסט שבתוך התא שלא מגיבים לאירועים האלה!
    הוא חושב שהם לא חלק מהתא.

    על איזה חלקים מהטקסט אני מדבר? –> על כאלה שנמצאים בתוך תגיות font, או תגיות b, או כל תגית אחרת…

    אם אתה רוצה שאני אצרף קטע קוד להדגמה, תודיע לי.

שלח תשובה