取得<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, 傳回符合數