עבור לתוכן
View in the app

A better way to browse. Learn more.

HWzone

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

עזרה ב jquery

Featured Replies

פורסם

שלום לכולם

יש לי בעיה עם קוד jquery שכתבתי, הקוד עובד. אבל הבעיה היא כזאת:

בכל פעם שיש קליק בתוך ה#main-wrapper (שהוא בעצם כמעט כל הDOM), נידרש זיהוי האם ישנה תכונה של contenteditable.

אם יש (contenteditable == 'true'), פועלת פונקציה שמופעלת רק כאשר הפוקוס מורד מהאלמנט הנבחר, לוקחת את התוכן שלו ומציג אותו בלוג.

אז מה הבעיה?

שמסיבה שאינה ברורה לי, הפונקציה "סופרת" לי את מס' הקליקים ומציגה בהתאם הודעות ללוג. לדוגמה, בפעם הראשונה שאני לוחץ על <div> כל שהו (ולאחר מכן לוחץ מחוצה לו), אני מקבל הודעה אחת ללוג.

בפעם השניה אני מקבל 2 הודעות. אם אחרי זה נגיד אני לוחץ ברצף 5 פעמים, ואחר כך בחוץ אני אקבל 7 הודעות ללוג (2+5). וכן הלאה...

אני מעונין לקבל רק הודעה אחת בכל פעם שאני לוחץ מחוץ לאלמנט הנבחר.

עזרה מישהו???



$("#main-wrapper").click(function (e) {
var contenteditable = $(e.target).attr('contenteditable');
if (contenteditable == 'true') {
$(e.target).focusout(function() {
var content = $(this).html();
console.log("get: " + content);
});
};
});

פורסם

אתה שוכח שה Event של ה FocusOut לא "נמחק" לאחר שהוא מתבצע. לכן כל פעם שאתה לוחץ על האלמנט את אוגר עוד ועוד אירועים.

הפתרון הוא לעשות unbind לאירוע כשהוא מסתיים (אחרי ה console.log).

פורסם

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

המלצה שלי היא להיות פחות גנרי, כלומר: תן לכל ה - div שניתנים לעריכה - class="editable" ואז תיתן להם click event בצורה כזו:

$("#main-wrapper").on("click",".editable",function(){...}")

אתה יכול לראות פירוט של ON כאן.

אם אתה משתמש בגרסאות ישנות יותר תחליף את ON ב - delegate / live

פורסם
  • מחבר

אתה שוכח שה Event של ה FocusOut לא "נמחק" לאחר שהוא מתבצע. לכן כל פעם שאתה לוחץ על האלמנט את אוגר עוד ועוד אירועים.

הפתרון הוא לעשות unbind לאירוע כשהוא מסתיים (אחרי ה console.log).

תודה לכולם על העזרה!

מה שעשיתי בסוף זה שמתי את הunbind דווקא לפני הfocusout וזה עובד מעולה

ככה שכל פעם לפני שוהא לוקח את ההfocusoutהוא עושה הunbindלכל מה שהוא "זוכר" וככה אני מקבל רק אירוע אחד.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.