-
取得<form>裡元素
-
<form name="form1">
<input type="text" id="username" /><br />
<input type="password" id="password" /><br />
<input type="button" id="send" />
</form>
- 每一對<form>...</form>都解析為一個form物件,
可以透過document.forms集合來引用這些物件,
例如一個name屬性為"form1":document.forms["form1"]來取得,
或使用表單在HTML中的索引來引用:
document.forms[1],引用第二個表單物件
-
每個表單中的元素,都包含在forms的elements集合中,
可以利用元素在集合中的位置或元素的name屬性來取得元素的引用。
-
以欄位名稱(name屬性)存取表單欄位
- document
- form1
- username
- password
- send
- var oform = document.forms["form1"];
- var getName = oform.elements.username.value;
- 取elements集合中name屬性為username的值
- var getName = oform.elements["username"].value;
- 以元素名稱來取值
- var getName = oform.elements[0].value;
- 表單和欄位都沒有指定name或id屬性,
可使用forms與elements的index位置存取欄位
- document
- forms[0]
(form1)
- elements[0]
(username)
- elements[1]
(password)
- elements[3]
(send)
- document.forms[0].elements[0].value;
- forms
- 所有表單物件是都<form>的物件集合
- elements
- 表單內所有欄位物件的集合
- forms與elements為一個Array Object,
依tag在HTML文件出現的順序來編號,index由0開始。
此方法,要注意tag順序的變動會影響JavaScript程式。
-
form
-
屬性
-
action
- 存取form處理程式路徑
-
elements
- Array,表單中所有表單欄位的集合
-
enctype
- 表單向伺服器發送資料時,資料應該使用的編碼方法,
預設為「application/x-www-form-urlencoded」,
如果要上傳檔案,則「multipart/form-data」
-
length
- 表單欄位的數量
-
method
- 存取form資料傳送方法,有post與get
-
name
- 表單的名稱,即<form>中的name屬性
-
target
- form表單作用的框架
-
方法
-
reset()
- 重設form欄位回預設值
-
submit()
- 送出form欄位到伺服器
-
input
-
屬性
-
一般
-
form
- 取得input屬於那一個form
-
name
- name屬性
-
type
- 類型
-
value
- 設定或取得input的值
- 除下拉式功能表以外
-
accessKey
- 此input的快捷鍵
-
accept
- 顯示伺服器支援的ContentType清單
-
defaultValue
- 設定或取得input的預設值
-
disabled
- 設定input是否有作用,true為沒作用
-
tabIndex
- 設定Tab鍵切換順序
-
文字
-
maxLength
- 設定或取得input最大字元數
-
readOnly
- 設定或取得input是否是一個唯讀input,true為是
-
size
- 設定或取得input的尺寸
-
disabled與readOnly
- disable會使欄位無效,內容值無法傳送或讀取
- readOnly會使欄位唯讀,但內容可傳送或讀取
-
方法
-
input方法
-
blur()
- 設定input失去處理權
-
focus()
- 設定input擁有處理權
-
select()
- 選取input,使用反白顯示文字內容,只可以使用在文字欄位
-
click()
- 觸發onclick事件,button、checkbox、radio、reset、submit
- 如果使用input方法選擇文字欄位,需同時使用select()與focus(),欄位內容才會反白與取得處理權
obj.select();
obj.focus();
-
在button中使用submit()
- <input type="button" value="Submit" onclick="document.forms["form1"].submit();" />
- 如果使用submit()方法來提交表單,不會觸發<form>的onsubmit()事件,
這點與<input type="submit />或<input type="image" />提交按鈕不同。
-
防止使用者重覆按下提交按鈕
- <input type="button" value="Submit" onclick="this.disabled=true;this.form.submit();" />
-
滑鼠經過時自動選擇文字
- 在滑鼠經過時onmouseover="this.focus()";
在取得處理權後,選取文字,onfocus="this.select()";
-
checkbox-radio
-
屬性
-
checked
- 設定或取得是否選取或核取,選取或核取為true
-
defaultChecked
- true預設選取或核取,checkbox或radio裡的checked屬性
-
被選取的值
- if (oRadio[i].checked)
alert(oRadio[i].value);
-
設定選取
- document.forms["form1"].oRadio[i].checked = true;
-
全選、全不選、反選
- function changeBoxes(action) {
var objForm = document.forms["form1"];
var CB = objForm.hobby;
//取得checkbox屬性name=hobby的集合
for (var i=0,item; item = CB[i];i++){
if (action < 0)
item.checked = !item.checked;
//action傳入-1為反選
//利用!來相反所有選擇
else
item.checked = action;
// action傳入1(true)為全選
// action傳入0(false)為全不選
}
}
-
select-option
- select物件就是<select>,其中disabled、form、name、tabIndex、type、value等屬性和input物件相同
-
select屬性
-
length
- 取得共有多少<option>
-
multiple
- 設定或取得選擇是否複選,true為多選
-
options
- 取得option物件集合,這是一個Array,
例:SB.options[2]表示<select>中的第3項
-
selectedIndex
- 傳回選擇的選項index值,這是options的Index值,
例:SB.options[selectedIndex].value;
-
size
- 設定欄位為下接式或清單,size大於1是清單方塊
-
text
- 選項名稱
-
type
- select類型,單選傳回select-one,複選select-multiple
-
option屬性
-
text
- 存取選擇文字
-
defaultSelected
- option預設選項,即selected屬性
-
index
- option陣列index位置,以0開始
-
label
- 設定或取得選項說明文字
-
selected
- 是否被選取,true為選取
-
取得<select>選取值
- function getSelectValue(selectName){
var objForm = document.forms["form1"];
var SB = document.elements[selectName]; //取得對應的select
if (SB.type = "select-one") {
//單選
var Choice = SB.selectedIndex;
alert("Your Choice" + SB.options[Choice].text);
}
else {
//複選
var Choice = new Array;
for (var i=0,len=SB.options.length; i<len;i++){
if (SB.options[i].selected)
Choice.push(SB.options[i].text);
}
alert("Your Choice" + Choice.join());
}
}
-
新增、替代、刪除<option>
-
新增
- 使用Option()建構式直接新增
- var addOption = new Option(text, value, defaultSelected, selected);
- defaultSelected與selected預設為0(false),可不設定。
- 通常會將<select>清單的length直接設定為新選項,即最後一項。
- SB.options[SB.options.length] = addOption;
- function addOption(selectName, optionIndex) {
var objForm = document.forms["form1"];
var SB = objForm.elements[selectName];
var addOP = new Option("金剛", "King Kong");
//處理IE相容性
//先新增,再移動到指定Index
SB.options[SB.options.length] = addOP;
SB.insertBefore(addOP, SB.options[optionIndex]);
}
-
替代
- SB.options[selectIndex] = addOption;
-
刪除
- SB.options[selectIndex] = null;
- function removeOption(selectName, optionIndex){
var objForm = document.forms["form1"];
var SB = objForm.elements[selectName];
SB.options[optionIndex] = null;
}
-
textarea
- testarea物件就是<textarea>,其中accessKey、defaultValue、disabled、form、name、readOnly、tabIndex、type等屬性和input物件相同
-
屬性
-
cols
- 每一行可以有多少字元
-
rows
- 多少行(列)
-
限制使用者輸入字元數
- 由於<textarea>沒有<input>的maxlength,所以我們自訂一個屬性來使用
- <textarea name="comments" id="comments" cols="40" rows="4" maxlength="100" onkeypress="return lessThan(this);"></textarea>
- function lessThan(objTA){
//比較輸入字元數與「自訂屬性maxlength」的比較結果
return objTA.value.length < objTA.getAttribute("maxlength");
}
-
Regular Expression
-
基本字元
-
\n
- 換行符號
-
\r
- Enter
-
\t
- Tab
-
\xHex
- 16進位ASCII
-
\xOct
- 8進位ASCII
-
\符號
- 轉義,讓符號只是符號,無RE作用,
因為符號在RE裡有其他作用,
\.代表.、\?代表?,
符號有:
.、?、/、\、[、]
{、}、(、)、+、*、|
-
字元集"["與"]"符號
-
[abc]
- 代表英文a、b、c
-
[a-z]
- 代表26個英文小寫
-
[A-Z]
- 代表26個英文大寫
-
[0-9]
- 代表數字0到9
-
[a-zA-Z]
- 代表所有大小寫英文
-
[^abc]
-
除了a、b、c以外任何字元
-
-
- 英文或數字的一個範圍
-
[^]
- 在[]裡的^為排除的意思,
-
常用範圍
-
\w
- [0-9a-zA-Z_],任何英數字和底線
-
\W
- [^0-9a-zA-Z_],也就是^\w的意思
-
\d
- [0-9],任何數字
-
\D
- [^0-9],也就是^\w的意思
-
\s
- 比對空格,空白字元(space)、tab、
換行字元、return/enter
-
.
- 點,比較任何字元,換行字元(newline)除外
-
語法
-
var reName = /pattern/[g|i|gi];
- 使用變數來儲存pattern,遇/.../字串自動建立RegExp物件
- 把pattern被在"//"符號之間,就是你所有要過濾的規則,例如/[0-9]/
-
[g|i|gi]選擇性參數,尋找方式
- g
- 比對字串中所有符合pattern字串的子字串, 如果沒有設定,將只找第一個符合pattern的字串
- i
- 不區分pattern字串的英文大小寫
-
(1) var reJS = /[jJ]script/;
(2) var reJS = /[jJ]ava[sS]cript/;
- (1)jscript(j小寫)和Jscript(J大寫)都符合
(2)2*2會出現四種符合的組合。javascript、javaScript、Javascript、JavaScript。
-
^開頭$結尾
-
var reStar = /^This/;
找出開頭是This的字串,注意,此^不是放在[^],位置不同作用不同
var reEnd = /bye.$/
找出結尾是bye.的字串
- 開頭與結尾
- ^
- 比對字串開頭
- $
- 比較字串結尾
-
var reID = /^[a-zA-Z]{1}[1-2]{1}[0-9]{8}/;
需要指定「出現次數」,例如身分證,
A123456789,第一碼為英文,第二碼為男女,3-9碼為數字
-
量詞
- ?
- 0或1次
- *
- 0或多次
- +
- 1或多次
- {n}
- 出現n次
- {n,}
- 至少n次
- {n,m}
- n到m次
- ( )
- 集合字元或/和中介字元,
成為子樣式
- /(Hot)? ?Donuts/
可比對出Donuts或Hot Donuts
- (red|blue) pill/
red pill或blue pill
-
定義好樣式(pattern)後,可使用test()方法來測試
- var regex = /^\d{5}/$;
if (!regex.test(inputField.Value))
...
-
RegExp物件
-
var objRE = new RegExp("pattern字串", "g|i|gi");
- 第一個pattern字串(不需放在//符號之間),第二個為尋找方式的參數
-
objRE.test(strValue);
- 使用RegExp物件的test()方法進行比對,符合回傳true
-
String.match(objRE);
- 如果在JS字串變數需要尋找是否擁有符合RE pattern的子字串,此時請使用String物件的match()方法
-
var str = "This is book.";
var objRE = new RegExp("is", "g");
var result = str.match(objRE);
- document.write(result); // is, is,沒有會傳回null,有會傳回Array
document.write(result.length); // 2, 傳回符合數