jQuery والتعامل مع DOM

أساسيات الأحداث في jQuery

15 دقيقة الدرس 18 من 30

مقدمة إلى أحداث 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);
    });
});

تمرين تطبيقي:

المهمة: إنشاء لوحة ألوان تفاعلية:

  1. إنشاء 5 عناصر div بألوان خلفية مختلفة
  2. عند النقر على لون، قم بتطبيق ذلك اللون على صندوق معاينة أكبر
  3. إضافة زر "إعادة تعيين" لمسح صندوق المعاينة
  4. عرض اسم اللون عند التمرير فوق كل لون

مكافأة: أضف حدث نقر مزدوج يضيف اللون إلى قائمة المفضلة.

النقاط الرئيسية

  • استخدم .on() لإرفاق معالجات الأحداث
  • لف الكود دائماً في $(document).ready()
  • $(this) تشير إلى العنصر الذي أطلق الحدث
  • استخدم .off() لإزالة معالجات الأحداث
  • تجنب الدوال السهمية عندما تحتاج سياق this