فرمها و control elementها مثل <input> دارای prperty و eventهای ویژهای هستند.
وقتی فرمها را یاد بگیریم، کار کردن با آنها بسیار راحتتر میشود.
Navigation: form and elements
فرمهای document از اعضای مجموعهی ویژهی document.forms هستند.
این به اصطلاح یک مجموعهی نامگذاری شده است: هم نامگذاری شده و هم ترتیبدار شده است. برای دسترسی به فرم میتوانیم هم از نام آن و هم از شمارهی آن در document استفاده کنیم.
document.forms.my; // "my" = فرم با نام
document.forms[0]; // document اولین فرم در
وقتی یک فرم داریم، در این صورت هر elementای در مجموعهی نامگذاری شده با form.elements قابل دسترسی است.
برای مثال:
<form name="my">
<input name="one" value="1">
<input name="two" value="2">
</form>
<script>
// form گرفتن
let form = document.forms.my; // <form name="my"> element
// element گرفتن
let elem = form.elements.one; // <input name="one"> element
alert(elem.value); // 1
</script>
ممکن است elementهای زیادی با نام یکسان وجود داشته باشند. این در مورد radio buttonها و checkboxها معمول است.
در آن صورت، form.elements[name] یک مجموعهاست. برای مثال:
<form>
<input type="radio" name="age" value="10">
<input type="radio" name="age" value="20">
</form>
<script>
let form = document.forms[0];
let ageElems = form.elements.age;
alert(ageElems[0]); // [object HTMLInputElement]
</script>
این navigation propertyها به tag structure وابستگی ندارند. تمام control elementها، فرقی ندارد چقدر در فرم عمیق باشند، در form.elements قابل دسترسی هستند.
.را درون خود فهرست میکنند form controls دارند که elements property در خودش داشته باشد. آنها همچنین <fieldset> elements یک فرم ممکن است یک یا چند
For instance:
<body>
<form id="form">
<fieldset name="userFields">
<legend>info</legend>
<input name="login" type="text">
</fieldset>
</form>
<script>
alert(form.elements.login); // <input name="login">
let fieldset = form.elements.userFields;
alert(fieldset); // HTMLFieldSetElement
// .دریافت کنیم fieldset و هم از form را با نام هم از input ما میتوانیم
alert(fieldset.elements.login == form.elements.login); // true
</script>
</body>
form.name.دسترسی داشته باشیم element به form[index/name] کوتاهتر هم وجود دارد: ما میتوانیم با notation یک
به عبارت دیگر، به جای form.elements.login میتوانیم بنویسیم form.login.
آن هم کار میکند، ولی یک مشکل جزئی وجود دارد: اگر به یک element دسترسی داشته باشیم، و بعد name آن را تغییر بدهیم، آنگاه آن هنوز با نام قدیمی قابل دسترسی است (همچنین با نام جدید)
آسانتر است که آن را در یک مثال ببینیم:
<form id="form">
<input name="login">
</form>
<script>
alert(form.elements.login == form.login); // true, همان <input>
form.login.name = "username"; // را تغییر میدهد input نام
// میکند update را name، forms.elements
alert(form.elements.login); // undefined
alert(form.elements.username); // input
// را مجاز میکند: هم جدید و هم قدیمی name فرم هر دو
alert(form.username == form.login); // true
</script>
با این حال، این معمولا یک مشکل نیست، چون ما به ندرت نام elementهای فرم را تغییر میدهیم.
Backreference: element.form
برای هر elementای، فرم به عنوان element.form قابل دسترسی است. بنابراین یک فرم به همهی elementها ارجاع میدهد و elementها هم به فرم ارجاع میدهند.
این هم تصویرش است:
برای مثال:
<form id="form">
<input type="text" name="login">
</form>
<script>
// form -> element
let login = form.login;
// element -> form
alert(login.form); // HTMLFormElement
</script>
Form elements
.صحبت کنیم form controls بیایید دربارهی
input and textarea
.به مقدار آنها دسترسی داشته باشیم radio buttons و checkboxes برای input.value (string) یا input.checked (boolean) ما میتوانیم با
مثل این:
input.value = "جدید value";
textarea.value = "جدید text";
input.checked = true; // radio button یا checkbox برای یک
textarea.value, نه textarea.innerHTML.به آن دسترسی داشته باشیم textarea.innerHTML تو در تو حفظ میکند اما ما هرگز نباید از طریق HTML مقدار خود را به عنوان <textarea>...</textarea> لطفا توجه کنید که با اینکه
.که در ابتدا در صفحه بوده را ذخیره میکند، نه مقدار فعلی را HTML آن فقط
select و option
:مهم دارد property سه <select> element یک
select.options–<option>subelements مجموعهای ازselect.value– در حال حاضر انتخاب شده<option>مقدارselect.selectedIndex– در حال حاضر انتخاب شده<option>تعداد
:عرضه میکنند <select> کردن یک مقدار برای set آنها سه راه مختلف برای
- .قرار میدهد
trueآن را برابرoption.selectedو مقدار (برای مثالselect.options) متناظر را پیدا میکند<option>عنصر - .را برابر آن مقدار جدید قرار میدهد
select.valueاگر یک مقدار جدید را بدانیم: - .را برابر آن عدد قرار میدهد
select.selectedIndexجدید را بدانیم: مقدار option number اگر
:اینجا مثالی از هر سه متد میبینیم
<select id="select">
<option value="apple">سیب</option>
<option value="pear">گلابی</option>
<option value="banana">موز</option>
</select>
<script>
// تمام سه خط کار یکسانی انجام میدهند
select.options[2].selected = true;
select.selectedIndex = 2;
select.value = 'banana';
// .option از صفر شروع میشوند، پس اندیس دو یعنی سومین options :لطفا دقت داشته باشید
</script>
.به ندرت استفاده میشود attribute به طور همزمان انتخاب شوند. با این حال، این option داشته باشد، اجازه میدهد که چند attribute چند <select> های دیگر اگرcontrol برعکس بیشتر
.حذف/به آن اضافه کنید <option> subelements را از selected property برای چندین مقدار انتخاب شده، از روش اول برای تنظیم مقادیر استفاده کنید
:مقدار انتخابشده را به دست آوریم ،multi-select اینجا یک مثال داریم از اینکه چگونه از یک
<select id="select" multiple>
<option value="blues" selected>Blues</option>
<option value="rock" selected>Rock</option>
<option value="classic">Classic</option>
</select>
<script>
// multi-select گرفتن تمام مقادیر انتخابشده از
let selected = Array.from(select.options)
.filter(option => option.selected)
.map(option => option.value);
alert(selected); // blues,rock
</script>
.موجود است https://html.spec.whatwg.org/multipage/forms.html#the-select-element در مشخصات <select> element مشخصات کامل
جدید Option
:وجود دارد
option = new Option(text, value, defaultSelected, selected);
:را به صورت دستی مقداردهی کنیم. با این حال، ممکن است کوتاهتر باشد پس اینجا پارامترها وجود دارند attributes استقاده کنیم و document.createElement('option') اختیاری است، ما میتوانیم از syntax این
text– option متن درون,value– option مقدار,defaultSelected– ایجاد میشودselectedHTML-attribute باشدtrueاگرselected– انتخاب میشود option باشدtrueاگر
.انتخاب شده است یا نه option مشخص میکند که آیا selected در حالی که (آن را بگیریم option.getAttribute('selected') که ما میتوانیم با) میکند set را HTML-attribute مقدار defaultSelected در این است که selected و defaultSelected تفاوت بین
(false یا به سادگی حذف شوند، مقدار پیشفرض هر دو) .باشند false یا true در عمل باید معمولا هر دو مقدار
برای مثال، اینجا بک “unselected” option داریم:
let option = new Option("Text", "value");
// ایجاد میکند <option value="value">Text</option>
شده select اما option همان
let option = new Option("Text", "value", true, true);
:دارند property یک سری Option elements
option.selected- انتخاب شده است یا نه option
option.index
خودش <select> در بین بقیه option عدد :
option.text
(توسط بازدیدکننده دیده میشود) option محتوای متنی :
منابع
خلاصه
Form navigation:
document.forms
.قابل دسترسی است document.forms[name/index] یک فرم با :
form.elements
.کار میکنند <fieldset> همچنین با elements property استفاده کرد. form[name/index] قابل دسترسی هستند، یا فقط میتوان از form.elements[name/index] با Form elements عناصر :
element.form
.به فرم خود ارجاع میدهند form property عناصر در :
(.استفاده کنید که مشخص میکند یک مقدار انتخاب شده است یا نه input.checked از radio buttons و checkboxes برای) و … قابل دسترسی است. input.value، textarea.value، select.value با value مقدار
.به دست آورد options collection select.options یا از طریق select.selectedIndex همچنین میتوان مقدار را با اندیس <select> برای
اینها مبانی شروع کار با فرمها هستند. ما مثالهای بیشتری را در آموزش خواهیم دید.
.را پوشش خواهیم داد که ممکن است در هر عنصری اتفاق بیفتند، اما بیشتر در فرمها مدیریت میشوند blur و focus در فصل بعدی ما
نظرات
<code>استفاده کنید، برای چندین خط – کد را درون تگ<pre>قرار دهید، برای بیش از ده خط کد – از یک جعبهٔ شنی استفاده کنید. (plnkr، jsbin، codepen…)