كيفية تعيين "checked" لمربع الاختيار باستخدام jQuery: شرح مفصل للمبتدئين

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

لماذا يصاب مربع الاختيار بالجنون؟ قصة خطأ برمجي واحد

\n\n

تخيل: أنت تكتب نموذج تسجيل على موقع. هناك مربع اختيار "أوافق على الشروط". المستخدم ينقر - توضع العلامة. كل شيء يعمل. ثم تقرر إضافة زر "تحديد الكل" باستخدام jQuery. تكتب $('#agree').attr('checked', true) - ولا يحدث شيء. أو توضع العلامة مرة واحدة، ثم تتوقف عن الإزالة. هل هذا مألوف؟

\n\n

هذا السؤال هو واحد من أكثر الأسئلة شيوعًا على Stack Overflow. آلاف المطورين يتعثرون بنفس المشكلة. واليوم سنفهم لماذا يحدث ذلك، وكيفية تعيين checked لمربع الاختيار باستخدام jQuery بشكل صحيح.

\n\n

باختصار: ما هي المشكلة؟

\n\n

المشكلة هي أن العديد من المبتدئين (وليس فقط) يستخدمون طريقة .attr() للتحكم في السمة checked. ولكن منذ jQuery 1.6، الطريقة الصحيحة هي استخدام .prop(). الفرق بين السمة (attribute) والخاصية (property) هو موضوع رئيسي سنشرحه الآن.

\n\n

السمة مقابل الخاصية: ما الفرق؟

\n\n

دعنا نشرح ببساطة. سمة HTML هي ما تكتبه في الترميز:

\n\n
<input type="checkbox" id="agree" checked>
\n\n

السمة checked هنا تحدد الحالة الأولية لمربع الاختيار. ولكن عندما ينقر المستخدم - تتغير الخاصية (property) لعنصر DOM، بينما تبقى السمة كما هي.

\n\n

طريقة .attr() تعمل مع السمات، بينما .prop() تعمل مع الخصائص. وبما أننا نهتم بالحالة الحالية لمربع الاختيار (التي تتغير ديناميكيًا)، نحتاج إلى .prop().

\n\n

كيف يبدو ذلك في الكود

\n\n

هذا مثال بسيط يوضح الفرق:

\n\n
<!-- HTML -->\n<input type="checkbox" id="myCheckbox">\n<button id="setChecked">تعيين العلامة</button>\n<button id="removeChecked">إزالة العلامة</button>\n\n<script>\n// الطريقة الصحيحة (jQuery 1.6+)\n$('#setChecked').click(function() {\n    $('#myCheckbox').prop('checked', true);\n});\n\n$('#removeChecked').click(function() {\n    $('#myCheckbox').prop('checked', false);\n});\n</script>
\n\n

لاحظ: نمرر الوسيط الثاني true أو false - قيمة منطقية (boolean). هذا مهم.

\n\n

الأخطاء النموذجية للمبتدئين (وكيفية تجنبها)

\n\n

الخطأ 1: استخدام .attr() لتعيين checked

\n\n
// ❌ غير صحيح\n$('#myCheckbox').attr('checked', true);\n\n// ❌ غير صحيح أيضًا\n$('#myCheckbox').attr('checked', 'checked');
\n\n

لماذا هذا سيء؟ لأن .attr() يحدد السمة وليس الخاصية. بعد أول نقرة من المستخدم، قد تبقى السمة بينما تتغير الخاصية. والنتيجة - سلوك غير متسق.

\n\n

الخطأ 2: تمرير سلسلة نصية بدلاً من قيمة منطقية

\n\n
// ❌ غير صحيح\n$('#myCheckbox').prop('checked', 'true'); // سلسلة نصية، ليست قيمة منطقية
\n\n

هل يحول jQuery السلسلة النصية إلى قيمة منطقية؟ في بعض الحالات - نعم. لكن الاعتماد على ذلك ممارسة سيئة. دائمًا مرر true أو false بدون علامات اقتباس.

\n\n

الخطأ 3: نسيان استخدام .prop() عند قراءة الحالة

\n\n
// ❌ غير صحيح\nif ($('#myCheckbox').attr('checked')) { ... }\n\n// ✅ صحيح\nif ($('#myCheckbox').prop('checked')) { ... }
\n\n

لقراءة الحالة الحالية - فقط .prop().

\n\n

مثال كامل: نموذج مع مربعات اختيار وأزرار تحكم

\n\n

دعنا نجمع كل شيء معًا. تخيل أن لدينا قائمة خيارات يمكن للمستخدم اختيارها، وأزرار "تحديد الكل" و"إلغاء تحديد الكل".

\n\n
<!DOCTYPE html>\n<html>\n<head>\n    <title>التحكم في مربعات الاختيار باستخدام jQuery</title>\n    <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>\n</head>\n<body>\n    <h3                

المدونات

توصيات الكتب