كيفية الحصول على القيمة المحددة من القائمة المنسدلة في JavaScript: شرح كامل

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

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

ابدأ الدورة

توقف عن التخمين: كيف تستخرج القيمة المحددة من القائمة المنسدلة في JavaScript؟

\n\n

هل سبق لك أن واجهت موقفًا حيث يختار المستخدم شيئًا من قائمة منسدلة على موقع الويب، ولا يستطيع برنامجك "رؤية" ذلك؟ مألوف، أليس كذلك؟ هذا أحد أكثر الأسئلة شيوعًا على Stack Overflow (ولسبب وجيه!)، والذي يطرحه الآلاف من المطورين المبتدئين وحتى ذوي الخبرة. قد يبدو الأمر بسيطًا، لكن هناك تفاصيل دقيقة، وسنقوم بتحليلها مرة واحدة وإلى الأبد اليوم.

\n\n

في هذه المقالة، سأعرض لكم ليس طريقة واحدة، بل عدة طرق للحصول على القيمة المحددة من القائمة المنسدلة باستخدام JavaScript الخالص. ستتعرف على الفرق بين value و selectedIndex، وكيفية معالجة حدث الاختيار، وكيفية تجنب الوقوع في فخ التحديد المتعدد. هيا بنا!

\n\n

أبسط طريقة: الخاصية value

\n\n

تخيل أن لديك عنصر select عادي في HTML:

\n\n
<select id="city">\n  <option value="moscow">موسكو</option>\n  <option value="spb">سانت بطرسبرغ</option>\n  <option value="kazan">قازان</option>\n</select>
\n\n

للحصول على القيمة المحددة، نحتاج فقط إلى فعل شيئين:

\n\n
    \n
  1. العثور على عنصر <select> في DOM.
  2. \n
  3. قراءة الخاصية value الخاصة به.
  4. \n
\n\n

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

\n\n
const selectElement = document.getElementById('city');\nconst selectedValue = selectElement.value;\n\nconsole.log(selectedValue); // سيطبع، على سبيل المثال، "spb"
\n\n

مهم! الخاصية value لعنصر <select> تقوم تلقائيًا بإرجاع السمة value لعنصر <option> المحدد حاليًا. هذه هي الطريقة الأبسط والموصى بها إذا كنت بحاجة إلى القيمة وليس النص.

\n\n

ماذا لو كنت بحاجة إلى الحصول على نص العنصر المحدد؟

\n\n

أحيانًا نحتاج ليس إلى القيمة، بل إلى ما يراه المستخدم (على سبيل المثال، "موسكو" بدلاً من "moscow"). لهذا، هناك الخاصية textContent (أو innerText) للخيار المحدد. لكن أولاً، نحتاج إلى الحصول على الخيار نفسه:

\n\n
const selectElement = document.getElementById('city');\nconst selectedOption = selectElement.options[selectElement.selectedIndex];\nconst selectedText = selectedOption.textContent;\n\nconsole.log(selectedText); // سيطبع "موسكو"
\n\n

هنا نستخدم selectedIndex — وهو فهرس العنصر المحدد (بدءًا من 0). ثم نصل إلى مجموعة options ونأخذ العنصر المطلوب.

\n\n

كيفية التفاعل مع تغيير الاختيار في الوقت الفعلي؟

\n\n

مجرد الحصول على القيمة مرة واحدة أمر جيد، لكن في الغالب نحتاج إلى فعل شيء عندما يغير المستخدم اختياره. لهذا، نستخدم الحدث change:

\n\n
const selectElement = document.getElementById('city');\n\nselectElement.addEventListener('change', function() {\n  const selectedValue = selectElement.value;\n  const selectedText = selectElement.options[selectElement.selectedIndex].textContent;\n  \n  console.log('القيمة المحددة:', selectedValue);\n  console.log('النص المحدد:', selectedText);\n});
\n\n

الآن، في كل مرة يغير فيها المستخدم المدينة في القائمة المنسدلة، نحصل فورًا على البيانات المحدثة. مريح، أليس كذلك؟

\n\n

حالة خاصة: التحديد المتعدد (multiple select)

\n\n

ماذا لو كان لديك قائمة منسدلة مع اختيار متعدد؟ على سبيل المثال:

\n\n
<select id="skills" multiple>\n  <option value="html">HTML</option>\n  <option value="css">CSS</option>\n  <option value="js">JavaScript</option>\n</select>
\n\n

في هذه الحالة، سيعيد selectElement.value القيمة المحددة الأولى فقط، وليس الكل. للحصول على جميع العناصر المحددة، تحتاج إلى التكرار عبر مجموعة options:

\n\n
const selectElement = document.getEl                

المدونات

توصيات الكتب