الـ <output> ده تاج HTML جديد نسبيًا (دخل في HTML5)، وهو تاج متخصص جدًا ومهمته واضحة: عرض نتيجة عملية حسابية أو نتيجة تفاعل اليوزر مع عناصر تانية في الفورم.

إيه هو <output> بالظبط؟

  • هو عنصر بنستخدمه عشان نبين فيه ناتج حاجة حصلت في الفورم.
  • الناتج ده ممكن يكون:
    • نتيجة حسابية (زي مجموع رقمين اليوزر دخلهم).
    • القيمة الحالية لعنصر تاني زي <input type="range"> (الـ slider).
    • أي نتيجة بتطلع من script (غالبًا JavaScript) بناءً على مدخلات اليوزر.

ليه بنستخدم <output>؟ (الميزة الأساسية)

أهم ميزة في استخدام <output> بدلًا من إننا نعرض النتيجة في عنصر عادي زي <span> أو <div> هي المعنى الدلالي (Semantic Meaning).

  • لما بنستخدم <output>، إحنا بنقول للـ browser ولبرامج قراءة الشاشة (Accessibility Software) ولكل الأدوات التانية: “المحتوى اللي هنا ده هو نتيجة أو خرج لعملية معينة تمت في الفورم دي.”
  • ده بيساعد الأدوات دي تفهم هيكل الصفحة بشكل أفضل وتقدم تجربة أحسن للمستخدمين، خصوصًا اللي بيعتمدوا على الـ accessibility features.
  • بيخلي الكود بتاعنا ليه معنى أوضح وأكتر قابلية للقراءة.

إزاي بنستخدم <output>؟ (الكود)

الموضوع بسيط:

  1. بنحط الـ <output> تاج في المكان اللي عايزين النتيجة تظهر فيه.
  2. بنديله name attribute. ده اسم بنستخدمه عشان نميز الـ output ده لو فيه أكتر من واحد في الفورم، وبيبقى مفيد مع الفورم submission لو النتيجة دي مهمة.
  3. (اختياري ومُستحسن) بنديله id attribute عشان نقدر نوصله بسهولة من خلال الـ JavaScript عشان نغير قيمته.
  4. (اختياري ومُستحسن) بنستخدم for attribute عشان نربطه بالعناصر (<input> مثلاً) اللي النتيجة دي بتعتمد عليها. بنحط في الـ for الـ id بتاعت العناصر دي، ولو فيه أكتر من عنصر بنفصل بينهم بمسافة.

مثال: عرض قيمة الـ slider (زي ما عملنا في المثال اللي فات):

 <div>
     <label for="people_count">عدد الأفراد:</label>
     <input type="range" id="people_count" name="people" min="1" max="10" value="4"
            oninput="current_value.value = this.value"> <!-- هنا بنغير قيمة الـ output -->
 
     <output name="result" id="current_value" for="people_count">4</output> <!-- ده الـ output تاج -->
 </div>

في المثال ده:

  • حطينا <output> تاج.
  • اديناه name="result" و id="current_value".
  • استخدمنا for="people_count" عشان نربطه بالـ <input type="range"> اللي الـ id بتاعه people_count.
  • حطينا جواه مبدئيًا القيمة “4”.
  • الـ JavaScript اللي في oninput بيستخدم id="current_value" عشان يوصل للـ <output> ويغير قيمته (.value).

مثال تاني: عرض مجموع رقمين:

 <form oninput="sum_result.value = parseInt(num1.value) + parseInt(num2.value)">
    <label for="num1">الرقم الأول:</label>
    <input type="number" id="num1" name="number1" value="5">
    +
    <label for="num2">الرقم الثاني:</label>
    <input type="number" id="num2" name="number2" value="10">
    =
    <output name="sum" id="sum_result" for="num1 num2">15</output> <!-- النتيجة هنا -->
 </form>

في المثال ده:

  • استخدمنا oninput على الـ <form> نفسها عشان الحسبة تتعمل أول ما اليوزر يغير قيمة أي input جواها.
  • الكود بيجمع قيمة الرقمين (بعد ما يحولهم لأرقام صحيحة بـ parseInt) ويحط الناتج في الـ <output> اللي الـ id بتاعه sum_result.
  • لاحظنا إن الـ for attribute هنا فيه اتنين id مفصولين بمسافة (for="num1 num2") عشان النتيجة بتعتمد على الاتنين inputs دول.

نقط مهمة عن <output>:

  • هو عنصر inline بطبيعته، يعني بيظهر في نفس السطر مع العناصر اللي قبله وبعده (زي الـ <span>).
  • المحتوى اللي جواه بيعتبر جزء من الفورم، لكنه مش بيتبعت للسيرفر كـ input عادي. لو محتاج تبعت النتيجة دي للسيرفر، ممكن تحتاج تستخدم حقل input type="hidden" وتحدث قيمته بالـ JavaScript مع تحديث الـ <output>.
  • تقدر تنسقه باستخدام CSS زي أي عنصر تاني.

الخلاصة

الـ <output> تاج هو الطريقة الصحيحة والمناسبة (semantic way) عشان تعرض النتائج اللي بتطلع من تفاعل اليوزر مع الفورم أو من العمليات الحسابية اللي بتعتمد على مدخلاته. استخدامه بيخلي الكود بتاعك أوضح وبيحسن الـ accessibility بتاعت الصفحة بتاعتك. هو بديل أفضل من استخدام عناصر عامة زي <span> لعرض النتايج دي.