النماذج
مكتب الشاي يحتفظ بقسيمة واحدة. النموذج هو #slip. فيه حقل نص #guest واسمه guest، وحقل رقم #cups واسمه cups، وزر #send من النوع type="submit". تحت النموذج يقول #note كلمة blank.
النموذج يجمع حقولاً لها أسماء. ما كتبه الزائر تقرأه من value، وهذه الخاصية نص دائماً حتى لو كان نوع الحقل number. إرسال النموذج حدث submit على النموذج نفسه. من دون preventDefault يفتح المتصفح عنوان النموذج وتختفي هذه الصفحة. هذه القسيمة تستدعي preventDefault فيبقى النص مقروءاً. تضبط الصفحة الضيف على lida والفناجين على 2، وتنقر send مرة واحدة، فيصير السطر lida / 2 / stayed.
ليست شريط التذاكر
شريط التذاكر وضع مستمعاً واحداً للنقر على الأب وقرأ event.target. سطره كان red / blue / gold / 1 ولم يستدعِ preventDefault. صفحة اللوحة استدعت ذلك على رابط، وسطرها click / seal / plaque / true / quiet. هذه القسيمة ليست أياً منهما. لا زر gold ولا currentTarget. اسم الحدث submit. القيمتان المهمتان هما lida والنص 2.
getElementById("guest") يجد الحقل بالمعرّف. slip.elements.guest يجده بالاسم عبر النموذج. هنا المعرّف والاسم كلمة واحدة حتى يعمل الطريقان. درس لاحق يفحص الحقل الفارغ أو الصيغة. هذه الصفحة لا تفعل ذلك. الضيف الفارغ يُرسَل أيضاً.
ماذا تسجّل القسيمة
يبدأ النص بكلمة blank. الضيف والفناجين فارغان في البداية. تسمية الزر تبقى send. اقرأ الصفوف بالترتيب. كل مقطع يبدأ من القسيمة الفارغة، إلا صف الصفحة فهو العرض في الأسفل. ذلك العرض ينقر send مرة واحدة.
📊 ماذا تسجّل القسيمة
| اللحظة | ماذا تقرأ | نص الملاحظة | الخلط السهل |
|---|---|---|---|
| ضبط الضيف على lida | guest.value |
lida | قراءة المعرّف guest |
| ضبط الفناجين على 2 | cups.value |
2 وهو نص | توقع الرقم 2 |
| نقر send والدالة تكتب stayed | الملاحظة | stayed | استدعاء slip.submit() فيتخطى المستمع |
| الاسمان عبر النموذج | elements.guest وelements.cups |
lida 2 | قراءة elements.slip |
| سكربت الصفحة | السطر | lida / 2 / stayed | red / blue / gold / 1 |
value لا يحوّل حقل الرقم إلى رقم. بعد تخزين 2 تكون cups.value المحارف 2. typeof cups.value يساوي "string". إذا احتجت رقماً لاحقاً فحوّله أنت. هذا السطر لا يفعل ذلك.
send.click() يطلق submit لأن نوع الزر submit. slip.submit() نداء آخر: يرسل النموذج ولا يشغّل مستمع submit، فلا تصل preventDefault إلى التنفيذ. هذه الصفحة تستخدم نقرة الزر.
طريقان إلى الحقل نفسه
getElementById("cups") يستخدم المعرّف. slip.elements.cups يستخدم الاسم، وبعد أن تمسك النموذج فقط. هنا الصفتان الكلمة نفسها فيتفق الطريقان. لو كان الاسم count وبقي المعرّف cups، لما وُجد elements.cups ولصار الحقل تحت elements.count.
اسم الضيف
الحقل يبدأ فارغاً. يخزّن السكربت lida في value ثم يعيد قراءة الخاصية نفسها إلى النص. لم يُرسَل شيء بعد.
let guest = document.getElementById("guest");
let note = document.getElementById("note");
guest.value = "lida";
note.textContent = guest.value;
console.log(note.textContent);
السجل lida. المعرّف هو guest. النص ليس كلمة guest. هو أي سلسلة تجلس في value.
كم فنجاناً
قسيمة جديدة. حقل الفناجين type="number". خزّن 2 واقرأ value ثم اسأل typeof.
let cups = document.getElementById("cups");
let note = document.getElementById("note");
cups.value = "2";
note.textContent = cups.value + " " + typeof cups.value;
console.log(note.textContent);
السجل 2 string. الصندوق يبدو رقمياً والسكربت استلم نصاً. خزّن الرقم 2 من دون علامات اقتباس وستعود الخاصية نص "2" أيضاً.
زر الإرسال
قسيمة جديدة. المستمع على النموذج لحدث submit. يستدعي preventDefault ويكتب stayed. ثم تنقر الصفحة زر send. لا تستدعي slip.submit().
let slip = document.getElementById("slip");
let note = document.getElementById("note");
function pour(event) {
event.preventDefault();
note.textContent = "stayed";
}
slip.addEventListener("submit", pour);
document.getElementById("send").click();
console.log(note.textContent);
السجل stayed. المستمع اشتغل فلم يغادر المتصفح هذه الصفحة. استدعِ slip.submit() بدل نقر send فلا تعمل الدالة pour. يبقى النص blank.
الأسماء على القسيمة
قسيمة جديدة بلا مستمع. يكتب السكربت الحقلين عبر slip.elements باستخدام الاسم، ثم يجمعهما في النص.
let slip = document.getElementById("slip");
let note = document.getElementById("note");
slip.elements.guest.value = "lida";
slip.elements.cups.value = "2";
note.textContent = slip.elements.guest.value + " " + slip.elements.cups.value;
console.log(note.textContent);
السجل lida 2. elements.guest هو الحقل الذي اسمه guest، وليس عنصراً معرّفه slip. المسافة فاصل في النص فقط. سطر الصفحة يستخدم لاحقاً /.
السطر تحت القسيمة
السكربت في آخر body بعد النموذج والفقرتين. mark يبدأ left. المستمع يمنع الإرسال الافتراضي، وينسخ القيمتين إلى النص، ويجعل mark مساوياً stayed. ثم يملأ السكربت lida و 2 وينقر send مرة واحدة. يُكتب السطر بعد تلك النقرة.
<!DOCTYPE html>
<html>
<head>
<title>forms — page</title>
</head>
<body>
<form id="slip">
<input id="guest" name="guest" type="text">
<input id="cups" name="cups" type="number">
<button id="send" type="submit">send</button>
</form>
<p id="note">blank</p>
<p id="line">…</p>
<script>
let slip = document.getElementById("slip");
let note = document.getElementById("note");
let mark = "left";
function pour(event) {
event.preventDefault();
note.textContent =
slip.elements.guest.value + " / " + slip.elements.cups.value;
mark = "stayed";
}
slip.addEventListener("submit", pour);
slip.elements.guest.value = "lida";
slip.elements.cups.value = "2";
document.getElementById("send").click();
document.getElementById("line").textContent =
note.textContent + " / " + mark;
</script>
</body>
</html>
السطر lida / 2 / stayed. الكلمة الأولى الضيف، والثانية الفناجين كنص، والأخيرة mark. المستمع اشتغل فالكلمة الأخيرة stayed وليست left. ينتهي النص عند lida / 2. كلمة blank ذهبت. سطر التذاكر صفحة أخرى. هذه القسيمة لا تتحقق من امتلاء الحقول.
عند المنضدة
- خزّن lida في حقل الضيف واقرأ
value. النص lida. - خزّن 2 في الفناجين واقرأ
valueمعtypeof. النص 2 string. - استمع إلى submit واستدعِ
preventDefaultوانقر send. النص stayed. - اقرأ الحقلين عبر
slip.elements. ثم اقرأ سطر الصفحة: lida / 2 / stayed.
أخطاء عند المنضدة
التسميات تبقى guest و cups و send. النص ليس كلمة slip.
- اعتبار
cups.valueالرقم 2 - استدعاء
slip.submit()وانتظار تشغيلpour - نسيان
preventDefaultفيفتح المتصفح عنوان النموذج - قراءة المعرّف guest وأنت تريد
value - البحث عن
slip.elements.slip - فحص الحقول الفارغة أو الأنماط في هذه الصفحة
- قراءة السطر كأنه red / blue / gold / 1
احتفظ بهذا
guest.valueهي lida بعد تخزين lidacups.valueالنص 2 وtypeofيساوي"string"send.click()يشغّل مستمع submit وslip.submit()لا يفعلpreventDefaultهو سبب بقاء الصفحة وإمكان قول stayedslip.elements.guestوslip.elements.cupsيقرآن الحقلين المسمّيين- سطر الصفحة lida / 2 / stayed
🧠 اختبر معرفتك
اختبر معرفتك
تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع
📝 التعليمات
- اقرأ كل سؤال بعناية
- اختر أفضل إجابة لكل سؤال
- يمكنك إعادة الاختبار عدة مرات كما تريد
- سيتم عرض تقدمك في الأعلى