深入解析form標簽
http://www.nowamagic.net/html/html_FormAnalysis.php在Javascript中,頁面上的每一對<form>標記都解析為一個對象,即form對象。
可以通過document.forms獲取以源順序排列的文檔中所有form對象的集合。
如果一個表單對象定義如下:
view source
print?
1 <form name="frm1" method="post" action="login.aspx">
獲得該表單對象的方法:
view source
print?
1 document.forms["frm1"]; // 根據name屬性值
2 document.forms[0]; // 根據索引號
3 document.frm1; // 直接根據name值獲得對象
form 表單應該注意的屬性
elements:獲取以源順序排列的給定表單中所有控件的集合。但是<input type="image">對象不在此集合內。
view source
print?
1 var txtName = myform.elements[0]; //獲得表單的第一個元素
2 var txtName = myform.elements["txtName"]; //獲得name屬性值為"txtName"的元素
3 var txtName = myform.elements.txtName; //獲得name屬性值為"txtName"的元素
enctype:設置或獲取表單的多用途網際郵件擴展(MIME)編碼。這個屬性的默認值為:application/x-www-form-urlencoded,如果要上傳文件,則應該設置為:multipart/form-data。
form 表單中的<label>標記
每一個表單元素的文字描述都應該使用<label>標記。
該標記用于將文字綁定到對應的表單元素上,它的for屬性指定它所要綁定的表單元素id值。綁定后單擊該文字,鼠標將聚焦到對應的文本框中或選中對應的選項。
若安裝了某些桌面主題,某些表單元素還會變換顏色來予以提示,這大大提高了用戶體驗。
示例代碼:
view source
print?
01 <form method="post" name="frm1">
02 <label for="txt">點我將聚焦到文本框</label>
03 <input type="text" id="txt" name="myname">
04 <br/>
05 <label for="rdo">點我將選中單選框</label>
06 <input type="radio" id="rdo" name="male"/>
07 <br/>
08 <label for="cbo">點我將選中復選框</label>
09 <input type="checkbox" id="cbo" name="hobby">
10 </form>
注意:
* 每個表單元素應當盡量使用<label>標簽來提高用戶體驗;
* 每個表單元素應當分配 name 屬性和 id 屬性。name 屬性:用來將數據提交到服務器;id 屬性:用來在客戶端做相應的操作;如:<label>標簽的綁定、CSS 選擇器的使用等。 ( name 屬性和 id 屬性應該盡可能地使用相同的或相關的值。)
在客戶端,Javascript對表單及表單元素的操作,更青睞于使用其name屬性。因為,對于某些特定的表單元素(如:單選按鈕等),使用其name屬性更易于獲得元素值,也更方便向服務器傳送數據!
Javascript操作form表單元素,比較少用的屬性:
* defaultChecked 設置或獲取復選框或單選鈕的狀態。
* defaultValue 設置或獲取對象的初始內容。
* disabled 設置或獲取控件的狀態。
提交表單
提交表單的示例:
view source
print?
1 <form name="frm" method="post" action="javascript:alert('提交成功!');">
2 <input type="button" value="提交功能" onclick="document.forms['frm'].submit();">
3 <input type="button" value="禁用反復提交" onclick="this.disabled=true; this.form.submit();">
4 </form>
注意:
* 如果使用submit()方法來提交表單,則不會觸發<form>表單元素的onsubmit事件,這是與用<input type="submit">提交元素不同的地方;
* 可以在按鈕的提交或點擊事件中,使用disabled 屬性來禁用用戶反復點擊提交按鈕的行為,減少服務器的響應負擔;
設置文本框
控制文本框的字符個數:
view source
print?
01 <script language="javascript">
02 function LessThan(_textArea){
03 //返回文本框字符個數是否符號要求的boolean值
04 return _textArea.value.length < _textArea.getAttribute("maxlength");
05 }
06 </script>
07 <label for="name">文本框:</label>
08 <input type="text" name="name" id="name" value="姓名" maxlength="10"></p>
09 <br>
10 <label for="comments">多行文本框:</label>
11 <textarea name="comments" id="comments" cols="40" rows="4" maxlength="50" onkeypress="return LessThan(this);"></textarea>
注意:多行文本框<textarea>中的maxlength為自定義屬性;如果在<textarea>中輸入字符時,換行也算一個字符;
鼠標經過時,自動選中文本框:
view source
print?
01 <script language="javascript">
02 window.onload = function(){
03 var txtName = document.getElementsByName("myName")[0];
04 txtName.onmouseover = function(){
05 this.focus();
06 };
07 txtName.onfocus = function(){
08 this.select();
09 };
10 }
11 </script>
12 <INPUT TYPE="text" NAME="myName" value="默認值被選中" />
實現了行為與結構的分離。
設置單選按鈕
獲取選中的單選按鈕 & 設置單選按鈕被選中:
view source
print?
01 <script language="javascript">
02 //獲取選中項
03 function getChoice(){
04 var oForm = document.forms["myForm1"];
05 //radioName是單選按鈕的name屬性值
06 var aChoices = oForm.radioName;
07 //遍歷整個單選項表
08 for(i=0;i<aChoices.length;i++)
09 if(aChoices[i].checked)
10 break; //如果發現了被選中項則退出
11 alert("您選中的是:"+aChoices[i].value);
12 }
13 //設置選中項
14 function setChoice(_num){
15 var oForm = document.forms["myForm1"];
16 //radioName是單選按鈕的name屬性值
17 oForm.radioName[_num].checked = true; //其它選項的checked值會自動設置為false
18 }
19 </script>
20 //調用代碼
21 <input type="button" value="獲取選中項" onclick="getChoice();" />
22 <input type="button" value="設置第1項被選中" onclick="setChoice(0);" />
需要保證同一組單選按鈕的name屬性值相同即可。
設置復選框
設置復選框的“全選”、“全不選”及“反選”功能:
view source
print?
01 <script language="javascript">
02 function changeBoxes(_action){
03 var myForm = document.forms["myForm1"];
04 //myCheckbox 為所有復選框的name屬性值
05 var oCheckBox = myForm.myCheckbox;
06
07 for(var i=0;i<oCheckBox.length;i++) //遍歷每一個選項
08 if(_action < 0)//反選
09 oCheckBox[i].checked = !oCheckBox[i].checked;
10 else
11 //_action為1是則全選,為0時則全不選
12 oCheckBox[i].checked = _action;
13 }
14 </script>
15 <form name="myForm1">
16 <input type="checkbox" name="myCheckbox">aa
17 <input type="checkbox" name="myCheckbox">bb
18 <input type="button" value="全選" onclick="changeBoxes(1);" />
19 <input type="button" value="全不選" onclick="changeBoxes(0);" />
20 <input type="button" value="反選" onclick="changeBoxes(-1);" />
21 </form>
設置下拉列表框
下拉列表框的multiple 屬性用于設置或獲取下拉列表框是否可以選中多個選項。
下拉列表框默認只能選中一項,若要設置為可以選中多項,則<select multiple = "multiple">即可。
type 屬性:javascript語言根據type屬性的值獲得下拉列表框select控件的類型。
type 屬性的值為:select-multiple 或 select-one(注意:下拉列表框的類型由multiple 屬性控制)。
查看下拉列表框的選項(單選項 & 多選項):
view source
print?
01 <script language="javascript">
02 function getSelectValue(_myselect){
03 var oForm = document.forms["myForm1"];
04 //根據參數(下拉列表框的name屬性值)獲得下拉菜單項
05 var oSelectBox = oForm.elements[_myselect];
06 //判斷是單選還是多選
07 if(oSelectBox.type == "select-one"){
08 var iChoice = oSelectBox.selectedIndex; //獲取選中項
09 alert("單選,您選中了" + oSelectBox.options[iChoice].text);
10 }
11 else{
12 var aChoices = new Array();
13 //遍歷整個下拉菜單
14 for(var i=0;i<oSelectBox.options.length;i++)
15 if(oSelectBox.options[i].selected)//如果被選中
16 //壓入到數組中
17 aChoices.push(oSelectBox.options[i].text);
18 //輸出結果
19 alert("多選,您選了:" + aChoices.join());
20 }
21 }
22 </script>
23 <form method="post" name="myForm1">
24 <select id="mysel" name="mysel" multiple="multiple" style="height:60px;">
25 <option value="a">AA</option>
26 <option value="b">BB</option>
27 <option value="c">CC</option>
28 </select>
29 <input type="button" onclick="getSelectValue('mysel')" value="查看選項" />
添加下拉列表框的選項
追加新選項到末尾:
view source
print?
1 <script language="javascript">
2 function AddOption(Box){ //追加選項到末尾
3 var oForm = document.forms["myForm1"];
4 var oBox = oForm.elements[Box];
5 var oOption = new Option("乒乓球","Pingpang");
6 oBox.options[oBox.options.length] = oOption;
7 }
8 </script>
插入新選項到指定位置:
view source
print?
01 <script language="javascript">
02 function AddOption(_select,_num){
03 var oForm = document.forms["myForm1"];
04 var oBox = oForm.elements[_select];
05 var oOption = new Option("text值","value值");
06 //兼容IE7,先添加選項到最后,再移動
07 oBox.options[oBox.options.length] = oOption;
08 oBox.insertBefore(oOption,oBox.options[_num]);
09 }
10 </script>
11 <input type="button" value="添加乒乓球" onclick="AddOption('myselect',1);" />
注意:如果直接使用insertBefore()方法插入選項,將會在IE中出現一個空選項的bug。為了解決IE的這個bug,只能使用先追加新選項到末尾,然后再使用insertBefore()方法將其移動到相應的位置。
類似這樣:為了跳過瀏覽器的某些bug或限制,實現預定目的的小技巧,通常稱之為hack。
替換某一選項:
view source
print?
01 <script language="javascript">
02 //替換選項
03 function ReplaceOption(_select,_num){
04 var oForm = document.forms["myForm1"];
05 var oBox = oForm.elements[_select];
06 var oOption = new Option("text值","value值");
07 oBox.options[_num] = oOption; //替換第_num 個選項
08 }
09 </script>
10 <input type="button" value="替換選項" onclick="ReplaceOption('selName',1);" />
通過oBox.options[_num] = oOption 直接將創建的新選項替換掉指定位置的選項。
刪除某一選項:
view source
print?
01 <script language="javascript">
02 function RemoveOption(_select,_num){
03 var oForm = document.forms["myForm1"];
04 var oBox = oForm.elements[_select];
05 oBox.options[_num] = null; //刪除選項
06 }
07 </script>
08 </head>
09 <body>
10 <select id="mysel" name="mysel" multiple="multiple">
11

12 <input type="button" value="刪除選項" onclick="RemoveOption('mysel',1);" />
直接通過oBox.options[_num] = null 刪除選項。
可以通過document.forms獲取以源順序排列的文檔中所有form對象的集合。
如果一個表單對象定義如下:
view source
print?
1 <form name="frm1" method="post" action="login.aspx">
獲得該表單對象的方法:
view source
print?
1 document.forms["frm1"]; // 根據name屬性值
2 document.forms[0]; // 根據索引號
3 document.frm1; // 直接根據name值獲得對象
form 表單應該注意的屬性
elements:獲取以源順序排列的給定表單中所有控件的集合。但是<input type="image">對象不在此集合內。
view source
print?
1 var txtName = myform.elements[0]; //獲得表單的第一個元素
2 var txtName = myform.elements["txtName"]; //獲得name屬性值為"txtName"的元素
3 var txtName = myform.elements.txtName; //獲得name屬性值為"txtName"的元素
enctype:設置或獲取表單的多用途網際郵件擴展(MIME)編碼。這個屬性的默認值為:application/x-www-form-urlencoded,如果要上傳文件,則應該設置為:multipart/form-data。
form 表單中的<label>標記
每一個表單元素的文字描述都應該使用<label>標記。
該標記用于將文字綁定到對應的表單元素上,它的for屬性指定它所要綁定的表單元素id值。綁定后單擊該文字,鼠標將聚焦到對應的文本框中或選中對應的選項。
若安裝了某些桌面主題,某些表單元素還會變換顏色來予以提示,這大大提高了用戶體驗。
示例代碼:
view source
print?
01 <form method="post" name="frm1">
02 <label for="txt">點我將聚焦到文本框</label>
03 <input type="text" id="txt" name="myname">
04 <br/>
05 <label for="rdo">點我將選中單選框</label>
06 <input type="radio" id="rdo" name="male"/>
07 <br/>
08 <label for="cbo">點我將選中復選框</label>
09 <input type="checkbox" id="cbo" name="hobby">
10 </form>
注意:
* 每個表單元素應當盡量使用<label>標簽來提高用戶體驗;
* 每個表單元素應當分配 name 屬性和 id 屬性。name 屬性:用來將數據提交到服務器;id 屬性:用來在客戶端做相應的操作;如:<label>標簽的綁定、CSS 選擇器的使用等。 ( name 屬性和 id 屬性應該盡可能地使用相同的或相關的值。)
在客戶端,Javascript對表單及表單元素的操作,更青睞于使用其name屬性。因為,對于某些特定的表單元素(如:單選按鈕等),使用其name屬性更易于獲得元素值,也更方便向服務器傳送數據!
Javascript操作form表單元素,比較少用的屬性:
* defaultChecked 設置或獲取復選框或單選鈕的狀態。
* defaultValue 設置或獲取對象的初始內容。
* disabled 設置或獲取控件的狀態。
提交表單
提交表單的示例:
view source
print?
1 <form name="frm" method="post" action="javascript:alert('提交成功!');">
2 <input type="button" value="提交功能" onclick="document.forms['frm'].submit();">
3 <input type="button" value="禁用反復提交" onclick="this.disabled=true; this.form.submit();">
4 </form>
注意:
* 如果使用submit()方法來提交表單,則不會觸發<form>表單元素的onsubmit事件,這是與用<input type="submit">提交元素不同的地方;
* 可以在按鈕的提交或點擊事件中,使用disabled 屬性來禁用用戶反復點擊提交按鈕的行為,減少服務器的響應負擔;
設置文本框
控制文本框的字符個數:
view source
print?
01 <script language="javascript">
02 function LessThan(_textArea){
03 //返回文本框字符個數是否符號要求的boolean值
04 return _textArea.value.length < _textArea.getAttribute("maxlength");
05 }
06 </script>
07 <label for="name">文本框:</label>
08 <input type="text" name="name" id="name" value="姓名" maxlength="10"></p>
09 <br>
10 <label for="comments">多行文本框:</label>
11 <textarea name="comments" id="comments" cols="40" rows="4" maxlength="50" onkeypress="return LessThan(this);"></textarea>
注意:多行文本框<textarea>中的maxlength為自定義屬性;如果在<textarea>中輸入字符時,換行也算一個字符;
鼠標經過時,自動選中文本框:
view source
print?
01 <script language="javascript">
02 window.onload = function(){
03 var txtName = document.getElementsByName("myName")[0];
04 txtName.onmouseover = function(){
05 this.focus();
06 };
07 txtName.onfocus = function(){
08 this.select();
09 };
10 }
11 </script>
12 <INPUT TYPE="text" NAME="myName" value="默認值被選中" />
實現了行為與結構的分離。
設置單選按鈕
獲取選中的單選按鈕 & 設置單選按鈕被選中:
view source
print?
01 <script language="javascript">
02 //獲取選中項
03 function getChoice(){
04 var oForm = document.forms["myForm1"];
05 //radioName是單選按鈕的name屬性值
06 var aChoices = oForm.radioName;
07 //遍歷整個單選項表
08 for(i=0;i<aChoices.length;i++)
09 if(aChoices[i].checked)
10 break; //如果發現了被選中項則退出
11 alert("您選中的是:"+aChoices[i].value);
12 }
13 //設置選中項
14 function setChoice(_num){
15 var oForm = document.forms["myForm1"];
16 //radioName是單選按鈕的name屬性值
17 oForm.radioName[_num].checked = true; //其它選項的checked值會自動設置為false
18 }
19 </script>
20 //調用代碼
21 <input type="button" value="獲取選中項" onclick="getChoice();" />
22 <input type="button" value="設置第1項被選中" onclick="setChoice(0);" />
需要保證同一組單選按鈕的name屬性值相同即可。
設置復選框
設置復選框的“全選”、“全不選”及“反選”功能:
view source
print?
01 <script language="javascript">
02 function changeBoxes(_action){
03 var myForm = document.forms["myForm1"];
04 //myCheckbox 為所有復選框的name屬性值
05 var oCheckBox = myForm.myCheckbox;
06
07 for(var i=0;i<oCheckBox.length;i++) //遍歷每一個選項
08 if(_action < 0)//反選
09 oCheckBox[i].checked = !oCheckBox[i].checked;
10 else
11 //_action為1是則全選,為0時則全不選
12 oCheckBox[i].checked = _action;
13 }
14 </script>
15 <form name="myForm1">
16 <input type="checkbox" name="myCheckbox">aa
17 <input type="checkbox" name="myCheckbox">bb
18 <input type="button" value="全選" onclick="changeBoxes(1);" />
19 <input type="button" value="全不選" onclick="changeBoxes(0);" />
20 <input type="button" value="反選" onclick="changeBoxes(-1);" />
21 </form>
設置下拉列表框
下拉列表框的multiple 屬性用于設置或獲取下拉列表框是否可以選中多個選項。
下拉列表框默認只能選中一項,若要設置為可以選中多項,則<select multiple = "multiple">即可。
type 屬性:javascript語言根據type屬性的值獲得下拉列表框select控件的類型。
type 屬性的值為:select-multiple 或 select-one(注意:下拉列表框的類型由multiple 屬性控制)。
查看下拉列表框的選項(單選項 & 多選項):
view source
print?
01 <script language="javascript">
02 function getSelectValue(_myselect){
03 var oForm = document.forms["myForm1"];
04 //根據參數(下拉列表框的name屬性值)獲得下拉菜單項
05 var oSelectBox = oForm.elements[_myselect];
06 //判斷是單選還是多選
07 if(oSelectBox.type == "select-one"){
08 var iChoice = oSelectBox.selectedIndex; //獲取選中項
09 alert("單選,您選中了" + oSelectBox.options[iChoice].text);
10 }
11 else{
12 var aChoices = new Array();
13 //遍歷整個下拉菜單
14 for(var i=0;i<oSelectBox.options.length;i++)
15 if(oSelectBox.options[i].selected)//如果被選中
16 //壓入到數組中
17 aChoices.push(oSelectBox.options[i].text);
18 //輸出結果
19 alert("多選,您選了:" + aChoices.join());
20 }
21 }
22 </script>
23 <form method="post" name="myForm1">
24 <select id="mysel" name="mysel" multiple="multiple" style="height:60px;">
25 <option value="a">AA</option>
26 <option value="b">BB</option>
27 <option value="c">CC</option>
28 </select>
29 <input type="button" onclick="getSelectValue('mysel')" value="查看選項" />
添加下拉列表框的選項
追加新選項到末尾:
view source
print?
1 <script language="javascript">
2 function AddOption(Box){ //追加選項到末尾
3 var oForm = document.forms["myForm1"];
4 var oBox = oForm.elements[Box];
5 var oOption = new Option("乒乓球","Pingpang");
6 oBox.options[oBox.options.length] = oOption;
7 }
8 </script>
插入新選項到指定位置:
view source
print?
01 <script language="javascript">
02 function AddOption(_select,_num){
03 var oForm = document.forms["myForm1"];
04 var oBox = oForm.elements[_select];
05 var oOption = new Option("text值","value值");
06 //兼容IE7,先添加選項到最后,再移動
07 oBox.options[oBox.options.length] = oOption;
08 oBox.insertBefore(oOption,oBox.options[_num]);
09 }
10 </script>
11 <input type="button" value="添加乒乓球" onclick="AddOption('myselect',1);" />
注意:如果直接使用insertBefore()方法插入選項,將會在IE中出現一個空選項的bug。為了解決IE的這個bug,只能使用先追加新選項到末尾,然后再使用insertBefore()方法將其移動到相應的位置。
類似這樣:為了跳過瀏覽器的某些bug或限制,實現預定目的的小技巧,通常稱之為hack。
替換某一選項:
view source
print?
01 <script language="javascript">
02 //替換選項
03 function ReplaceOption(_select,_num){
04 var oForm = document.forms["myForm1"];
05 var oBox = oForm.elements[_select];
06 var oOption = new Option("text值","value值");
07 oBox.options[_num] = oOption; //替換第_num 個選項
08 }
09 </script>
10 <input type="button" value="替換選項" onclick="ReplaceOption('selName',1);" />
通過oBox.options[_num] = oOption 直接將創建的新選項替換掉指定位置的選項。
刪除某一選項:
view source
print?
01 <script language="javascript">
02 function RemoveOption(_select,_num){
03 var oForm = document.forms["myForm1"];
04 var oBox = oForm.elements[_select];
05 oBox.options[_num] = null; //刪除選項
06 }
07 </script>
08 </head>
09 <body>
10 <select id="mysel" name="mysel" multiple="multiple">
11


12 <input type="button" value="刪除選項" onclick="RemoveOption('mysel',1);" />
直接通過oBox.options[_num] = null 刪除選項。
posted on 2011-03-15 10:04 都市淘沙者 閱讀(328) 評論(0) 編輯 收藏 所屬分類: JSP/PHP