jQuery والتعامل مع DOM
أساسيات الأحداث في jQuery
مقدمة إلى أحداث jQuery
الأحداث هي إجراءات أو أمور تحدث في المتصفح - مثل النقر على زر، التمرير فوق عنصر، أو تحميل صفحة. توفر jQuery طرقاً قوية للتعامل مع هذه الأحداث بكفاءة.
لماذا نستخدم jQuery للأحداث؟
- التوافق عبر المتصفحات: تعمل بشكل متسق عبر جميع المتصفحات
- صيغة مبسطة: كود أنظف وأسهل للقراءة
- معالجات متعددة: إرفاق معالجات أحداث متعددة لنفس العنصر
- تفويض الأحداث: التعامل مع الأحداث للعناصر المضافة ديناميكياً
طرق الأحداث الأساسية
توفر jQuery طرقاً مختصرة للأحداث الشائعة:
حدث النقر:
<button id="myButton">انقر هنا</button>
<script>
$(document).ready(function() {
$("#myButton").click(function() {
alert("تم النقر على الزر!");
});
});
</script>
طريقة .on()
طريقة .on() هي الطريقة الموصى بها لإرفاق معالجات الأحداث. إنها أكثر مرونة وتدعم تفويض الأحداث.
استخدام .on() لحدث النقر:
$("#myButton").on("click", function() {
console.log("تم النقر على الزر باستخدام .on()");
});
أفضل ممارسة: استخدم
.on() بدلاً من الطرق المختصرة مثل .click() للحصول على مرونة واتساق أفضل.
أنواع الأحداث الشائعة
أحداث الماوس:
// حدث النقر
$(".box").on("click", function() {
$(this).css("background-color", "var(--primary)");
});
// حدث النقر المزدوج
$(".box").on("dblclick", function() {
$(this).css("background-color", "red");
});
// دخول/خروج الماوس
$(".box").on("mouseenter", function() {
$(this).addClass("hover");
}).on("mouseleave", function() {
$(this).removeClass("hover");
});
حدث التمرير (اختصار):
$(".box").hover(
function() {
// دخول الماوس
$(this).css("opacity", "0.8");
},
function() {
// خروج الماوس
$(this).css("opacity", "1");
}
);
حدث استعداد المستند
أهم حدث في jQuery - يضمن تحميل DOM بالكامل قبل تنفيذ الكود:
ثلاث طرق لكتابة استعداد المستند:
// الطريقة 1 (كاملة)
$(document).ready(function() {
// الكود الخاص بك هنا
});
// الطريقة 2 (مختصرة)
$(function() {
// الكود الخاص بك هنا
});
// الطريقة 3 (دالة سهمية ES6)
$(() => {
// الكود الخاص بك هنا
});
الكلمة المفتاحية "this" في معالجات الأحداث
داخل معالج الحدث، تشير this إلى عنصر DOM الذي أطلق الحدث:
استخدام الكلمة المفتاحية "this":
<button class="btn">زر 1</button>
<button class="btn">زر 2</button>
<button class="btn">زر 3</button>
<script>
$(".btn").on("click", function() {
// "this" هو عنصر الزر DOM الذي تم النقر عليه
// $(this) يحوله إلى كائن jQuery
$(this).css("background-color", "green");
$(this).text("تم النقر!");
});
</script>
تحذير الدوال السهمية: لا تستخدم الدوال السهمية عندما تحتاج
this للإشارة إلى العنصر. الدوال السهمية لا تملك ربط this خاص بها.
ربط أحداث متعددة
ربط معالجات الأحداث:
$("#myElement")
.on("mouseenter", function() {
$(this).addClass("highlight");
})
.on("mouseleave", function() {
$(this).removeClass("highlight");
})
.on("click", function() {
$(this).toggleClass("active");
});
إزالة معالجات الأحداث
استخدم .off() لإزالة معالجات الأحداث:
إزالة الأحداث:
// إزالة جميع أحداث النقر
$("#myButton").off("click");
// إزالة معالج محدد
function myHandler() {
console.log("تم النقر");
}
$("#myButton").on("click", myHandler);
$("#myButton").off("click", myHandler);
// إزالة جميع الأحداث
$("#myButton").off();
مثال عملي: عداد تفاعلي
HTML:
<div class="counter">
<button id="decrease">-</button>
<span id="count">0</span>
<button id="increase">+</button>
<button id="reset">إعادة تعيين</button>
</div>
jQuery:
$(document).ready(function() {
let count = 0;
$("#increase").on("click", function() {
count++;
$("#count").text(count);
});
$("#decrease").on("click", function() {
count--;
$("#count").text(count);
});
$("#reset").on("click", function() {
count = 0;
$("#count").text(count);
});
});
تمرين تطبيقي:
المهمة: إنشاء لوحة ألوان تفاعلية:
- إنشاء 5 عناصر div بألوان خلفية مختلفة
- عند النقر على لون، قم بتطبيق ذلك اللون على صندوق معاينة أكبر
- إضافة زر "إعادة تعيين" لمسح صندوق المعاينة
- عرض اسم اللون عند التمرير فوق كل لون
مكافأة: أضف حدث نقر مزدوج يضيف اللون إلى قائمة المفضلة.
النقاط الرئيسية
- استخدم
.on()لإرفاق معالجات الأحداث - لف الكود دائماً في
$(document).ready() $(this)تشير إلى العنصر الذي أطلق الحدث- استخدم
.off()لإزالة معالجات الأحداث - تجنب الدوال السهمية عندما تحتاج سياق
this