jQuery – Events – אירועים חלק ב'
מאמר זה מהווה המשך למאמר על האירועים שיש ב-jQuery. סקרנו את אירוע ה-bind שקושר בין אלמנט, לאירוע ולפונקציה שתופעל בעקבות האירוע הזה. גם במאמר הזה אני אשתמש בפונקצית alert פשוטה ובאלמנט של פסקה עם id מסוים.
trigger
trigger משמש אותנו לקשירה בין אירועים שונים. נניח שיש לי שתי פסקאות: פסקה א' ופסקה ב'. אני מעוניין שלחיצה על פסקה א' תפעיל הודעה מעצבנת א' ולחיצה על פסקה ב' תפעיל גם הודעה מעצבנת ב' וגם את מה שלחיצה על פסקה א' מפעילה.
זה שימושי במיוחד כאשר יש לי ממשקים מסובכים שבהם יש לי סכימה של כל הטורים שסימנתי וכפתור שמבצע שליחה של הסכימה. באמצעות trigger לחיצה על הכפתור השני תבצע גם את הפעולה של הכפתור הראשון.
איך עושים את זה? בקלות.
פסקה ראשונה
פסקה שניה
<script type="text/javascript">
$(document).ready(function() {
$("#example1").bind("click" , function () {
alert("הודעה מעצבנת ראשונה");
});
$("#example2").bind("click" , function () {
alert("הודעה מעצבנת שניה");
$("#example1").trigger("click");
});
});
</script>
אפשר להשתמש גם באירוע triggerHandler שעושה את אותו הדבר כמו trigger רק עם הבדל חשוב אחד (לפחות מבחינת המאמר הזה) הוא מונע מהאלמנט שהופעל לקבל התנהגות של 'מופעל' מבחינת הדפדפן. זה קצת מסובך להסבר, תחשבו למשל על כפתור שיש לו אירוע של קליק, בדפדפני אינטרנט מסוימים אחרי שיש עליו קליק, או טריגר של קליק, יש מסגרת אפורה מסביבו. אם אני אשתמש ב-triggerHandler לא תהיה את המסגרת האפורה מסביבו. לא הבנתם? לא נורא.
toggle
toggle הוא אחד מהאירועים היותר שימושיים שיש ב-jQuery. נניח שיש לי כפתור שמכבה את האור ומדליק את האור, איך אני עושה את זה? האם לכתוב פונקציה מסובכת או להשתמש ב-flag זה או אחר שקובע בכל פעם מה הפונקציה שתופעל לאחר הקליק? בוודאי שלא. פעם נפעיל את פונקציה א' ופעם נפעיל את פונקציה ב'. את זה עושים באמצעות toggle. חשוב לציין ש-toggle עובד על קליקים בלבד ואפשר לשים הרבה יותר משתי פונקציות.
מתג של אור, לחצו עלי
ככה עושים את זה:
<script type="text/javascript">
$(document).ready(function() {
$("#example3").toggle(function () {
alert("מדליק את האור");
} , function () {
alert("מכבה את האור");
});
});
</script>
hover
hover הוא כמו toggle רק שבמקום קליקים מדובר על hover. יש פונקציה אחת כאשר העכבר מרחף מעל האלמנט ופונקציה שניה כאשר העכבר לא מרחף מעל האלמנט. הייתי מדגים עם alert אך כיוון שרוב הזמן העכבר יהיה מחוץ לאלמנט זה יגרום לעוד ועוד alertים מעצבנים. לפיכך משתמש באפקט של CSS.
העבירו מעלי את העכבר
$(document).ready(function() {
$("#example4").hover(function () {
$(this).css("color","red");
} , function () {
$(this).css("color","black");
});
});
Live\die
live מאד מאד דומה ל-bind רק שהוא מתייחס גם למופעים עתידיים של כל האלמנטים ולא רק לאלמנטים נוכחיים. מה זאת אומרת? ב-jQuery אני הרי יכול ליצור אלמנטים, ושימוש בlive יכול לקשור אליהם אירועים גם לפני שהאובייקטים עצמם נוצרו. שימושי כאשר אני רוצה להצמיד אירועים לאובייקטים שלא מתקיימים בזמן ההצמדה.הדגמה קצרה:
Click me if you dare…
וכך נראה הקוד:
$(document).ready(function() {
$("span").live("click", function(){
$(this).after("<span>Another wonderful span! Click me and see that I can create another span too!</span>");
});
});
כפי שראינו בדוגמא, באמצעות live אני מצמיד אירוע לכל ה-span, גם אלו שלא נוצרו עדיין! חוסך המון כאב ראש באפליקציות מורכבות. חשוב לציין שפונקצית live תומכת בכל האירועים פרט לready, focusin ו-focusout.
אם אני רוצה לבצע unbind, אני חייב להשתמש ב-die שעובד בדיוק כמו unbind.
ליחצו עלי ונסו ללחוץ על הspan הצהוב למעלה
וככה זה נראה בקוד:
$(document).ready(function() {
$("#example5").click(function() {
$("span").die("click");
});
});
Multiple bind
אני יכול לבצע bind לכמה פונקציות באותה פקודה. נניח שיש לי פסקה שאני רוצה לקשור אליה גם אירוע של לחיצה וגם אירוע של mouse in ן-mouse out. כל מה שאני צריך לעשות זה להעביר ל-bind אובייקט שמכיל את כל האירועים שאני רוצה לקשור אליהם.
הקליקו על הפסקה הזו על מנת לראות הודעה. העבירו את העכבר מעל הפסקה כדי לראות את הצבע משתנה
וככה זה נראה, שימו לב איך האובייקטים מסודרים יפה ובאופן אלגנטי. הרבה יותר נעים להשתמש ב-bind ובמיוחד כאשר אנו צריכים לקשור כמה אירועים לאלמנט אחד.
$(document).ready(function() {
$("#example16").bind({
click: function () {
alert("הודעה");
},
mouseover: function() {
$(this).css("color","red");
},
mouseout: function() {
$(this).css("color","black");
},
});
});
עד כאן בנוגע לאירועים. עכשיו אחרי שלמדנו על ה-selectors ועל ה-events אנו יכולים לגשת לשלב השלישי והיותר מהנה – הפונקציות המגניבות שאפשר להפעיל באמצעות jQuery. כשעכשיו אנו יכולים להפעיל אותן על כל אלמנט ובעקבות איזה אירוע. במאמר הבא אני מראה חלק מהפונקציות האלו.

