表單腳本 表單的基礎(chǔ)知識(shí)
HTMLFormElement有自己獨(dú)特的屬性和方法
acceptCharset,服務(wù)器能夠處理的字符集,等價(jià)于HTML中的accept-charset特性
action,接受請(qǐng)求的URL,等價(jià)于HTML中的action特性
elements,表單中所有控件的集合
enctype,請(qǐng)求的編碼類型,等價(jià)于HTML中的enctype特性
length,表單中控件的數(shù)量
method,要發(fā)送的HTTP請(qǐng)求類型,通常是"get"或"post",等價(jià)于HTML的method特性
name,表單的名稱,等價(jià)于HTML的name特性
reset(),將所有表單域重置為默認(rèn)值
submit(),提交表單
target(),用于發(fā)送請(qǐng)求和接收響應(yīng)的窗口名稱,等級(jí)與HTML的target特性
提交表單
用戶單擊提交按鈕或者圖像按鈕時(shí),就會(huì)提交表單,使用或
阻止表單提交代碼
var form=document.getElelemtById("myForm"); EventUtil.addHandler(form,"submit",function(event){ //取得事件對(duì)象 event=EventUtil.getEvent(event); //阻止默認(rèn)事件 EventUtil.preventDefault(event); })
以編程方式提交表單,不會(huì)觸發(fā)submit事件,因此調(diào)用方法之前要先驗(yàn)證表單數(shù)據(jù)
var form=document.getElementById("muForm"); //提交表單 form.submit();
提交表單時(shí),可能出現(xiàn)最大的問(wèn)題就是重復(fù)提交表單,在第一次提交表單之后,如果長(zhǎng)時(shí)間沒(méi)有反應(yīng),用戶可能會(huì)反復(fù)單擊提交按鈕。解決辦法兩個(gè),第一次提交之后就禁用提交按鈕,或者利用onsubmit事件處理程序取消后續(xù)的表單提交操作
重置表單
在用戶單擊重置按鈕時(shí),表單會(huì)被重置,使用type特性值為reset的或
阻止重置表單的代碼
var form = document.getElementById("myForm"); EventUtil.addHandler(form, "reset", function(event){ //取得事件對(duì)象 event = EventUtil.getEvent(event); //阻止表單重置 EventUtil.preventDefault(event); });
可以通過(guò)JavaScript來(lái)重置表單
var form=document.getElementById("myForm"); //重置表單 form.reset();
與調(diào)用submit()方法不同,調(diào)用submit方法會(huì)像單擊按鈕一樣觸發(fā)reset事件
表單字段
表單字段公有的屬性
disabled,布爾值,表示當(dāng)前字段是否被禁用
form,指向當(dāng)前字段所屬表單的指針。只讀
name,當(dāng)前字段的名稱
readOnly,布爾值,表示當(dāng)前字段是否只讀
tabIndex,表示當(dāng)前字段的切換序號(hào)
type,當(dāng)前字段類型,如CheckBox
value當(dāng)前字段將被提交給服務(wù)器的值
公有的表單字段方法
每個(gè)表單都有兩個(gè)方法,focus()和blur(),其中focus()方法用于將瀏覽器的焦點(diǎn)設(shè)置到表單字段,即激活字段,使其可以響應(yīng)鍵盤事件。在調(diào)用blur方法時(shí),并不會(huì)把焦點(diǎn)轉(zhuǎn)移到某個(gè)特定的元素上,僅僅是將焦點(diǎn)從調(diào)用這個(gè)方法的元素上移走
公有的表單字段事件
blur,當(dāng)前字段失去焦點(diǎn)時(shí)觸發(fā)
change,對(duì)于input和textarea元素,在失去焦點(diǎn)且value值改變時(shí)觸發(fā),對(duì)于select元素,在選擇選項(xiàng)時(shí)觸發(fā)
focus,當(dāng)前字段獲得焦點(diǎn)時(shí)觸發(fā)
var textbox = document.forms[0].elements[0]; EventUtil.addHandler(textbox, "focus", function(event){ event = EventUtil.getEvent(event); var target = EventUtil.getTarget(event); if (target.style.backgroundColor != "red"){ target.style.backgroundColor = "yellow"; } }); EventUtil.addHandler(textbox, "blur", function(event){ event = EventUtil.getEvent(event); var target = EventUtil.getTarget(event); if (/[^d]/.test(target.value)){ target.style.backgroundColor = "red"; } else { target.style.backgroundColor = ""; } }); EventUtil.addHandler(textbox, "change", function(event){ event = EventUtil.getEvent(event); var target = EventUtil.getTarget(event); if (/[^d]/.test(target.value)){ target.style.backgroundColor = "red"; } else { target.style.backgroundColor = ""; } })文本框腳本
兩種方式來(lái)表示文本框,input和textarea
選擇文本兩種文本框都支持select()方法,與select()方法對(duì)應(yīng)的是一個(gè)select事件,選擇文本框中的文本時(shí),就會(huì)觸發(fā)select事件
添加兩個(gè)屬性:selectionStart和selectionEnd,保存的是基于0的數(shù)值,表示選擇文本的范圍
所有文本框都有一個(gè)setSelectionRange()方法,接收兩個(gè)參數(shù):要選擇的第一個(gè)字符的索引和要選擇的最后一個(gè)字符之后的字符的索引
textbox.value = "Hello world!" //選擇所有文本 textbox.setSelectionRange(0, textbox.value.length); //"Hello world!" //選擇前 3 個(gè)字符 textbox.setSelectionRange(0, 3); //"Hel" //選擇第 4 到第 6 個(gè)字符 textbox.setSelectionRange(4, 7); //"o w"過(guò)濾輸入
剪切板事件
beforecopy,在發(fā)生復(fù)制操作前觸發(fā)
copy,在發(fā)生復(fù)制操作時(shí)觸發(fā)
beforecut,在發(fā)生剪切操作前觸發(fā)
cut,在發(fā)生剪切操作時(shí)觸發(fā)
beforepaste,在發(fā)生粘貼操作前觸發(fā)
paste,在發(fā)生粘貼操作時(shí)觸發(fā)
自動(dòng)切換焦點(diǎn)(function(){ function tabForward(event){ event = EventUtil.getEvent(event); var target = EventUtil.getTarget(event); if (target.value.length == target.maxLength){ var form = target.form; for (var i=0, len=form.elements.length; i < len; i++) { if (form.elements[i] == target) { if (form.elements[i+1]){ form.elements[i+1].focus(); } return; } } } } var textbox1 = document.getElementById("txtTel1"); var textbox2 = document.getElementById("txtTel2"); var textbox3 = document.getElementById("txtTel3"); EventUtil.addHandler(textbox1, "keyup", tabForward); EventUtil.addHandler(textbox2, "keyup", tabForward); EventUtil.addHandler(textbox3, "keyup", tabForward); })();HTML5約束驗(yàn)證API
必填字段
指定required屬性
其他輸入類型
新增email和url等類型
數(shù)值范圍
number,range,datetime,datetime-local,date,mouth,week,time等
輸入模式
pattern屬性,這個(gè)屬性的值是一個(gè)正則表達(dá)式,用于匹配文本框中的值
檢測(cè)有效性
checkValidty()方法,檢測(cè)表單匯總某個(gè)字段是否有效,所有表單字段都有這個(gè)方法,如果字段有效,返回true,反之返回false
if (document.forms[0].elements[0].checkValidity()){ //字段有效,繼續(xù) } else { //字段無(wú)效 }
customError,如果設(shè)置了setCustomValidity,則為true,否則為false
patternMismatch,如果值與指定的pattern屬性不匹配,返回true
rangeOverflow,如果值比max值大,返回true
rangeUnderflow,如果值比min值小,返回true
stepMisMatch,如果max和min之間的步長(zhǎng)值不合適,返回true
tooLong,如果值的長(zhǎng)度超過(guò)了maxlength屬性指定的長(zhǎng)度,返回true
typeMismatch,如果值不是mail或url返回的格式,返回true
valid,如果這里的屬性都是false,返回true
valueMissing,如果標(biāo)注為required的字段中滅有值,返回true
通過(guò)設(shè)置novalidate屬性,可以告訴表單不進(jìn)行驗(yàn)證
選擇框腳本
HTMLSelectElement類型提供的屬性和方法
add(newOption, relOption),向控件中插入新
multiple,布爾值,表示是否允許多項(xiàng)選擇;等價(jià)于 HTML 中的 multiple 特性。
options,控件中所有
remove(index),移除給定位置的選項(xiàng)。
selectedIndex,基于 0 的選中項(xiàng)的索引,如果沒(méi)有選中項(xiàng),則值為-1。對(duì)于支持多選的控件,只保存選中項(xiàng)中第一項(xiàng)的索引。
size,選擇框中可見(jiàn)的行數(shù);等價(jià)于 HTML 中的 size 特性
選擇框的value屬性由當(dāng)前選中項(xiàng)決定,相應(yīng)規(guī)則
如果沒(méi)有選中的項(xiàng),則選擇框的 value 屬性保存空字符串。
如果有一個(gè)選中項(xiàng),而且該項(xiàng)的 value 特性已經(jīng)在 HTML 中指定,則選擇框的 value 屬性等于選中項(xiàng)的 value 特性。即使 value 特性的值是空字符串,也同樣遵循此條規(guī)則。
如果有一個(gè)選中項(xiàng),但該項(xiàng)的 value 特性在 HTML 中未指定,則選擇框的 value 屬性等于該項(xiàng)的文本。
如果有多個(gè)選中項(xiàng),則選擇框的 value 屬性將依據(jù)前兩條規(guī)則取得第一個(gè)選中項(xiàng)的值。
為了便于訪問(wèn)數(shù)據(jù),HTMLOptionElement對(duì)象添加下列屬性
index,當(dāng)前選項(xiàng)在option集合中的索引
label,當(dāng)前選項(xiàng)的標(biāo)簽,等價(jià)于HTML中的label特性
selected,布爾值,表示當(dāng)前選項(xiàng)是否被選中,將這個(gè)屬性設(shè)置為true可以選中當(dāng)前選項(xiàng)
text,選項(xiàng)的文本
value,選項(xiàng)的值,等價(jià)于HTML中的value特性
選擇選項(xiàng)
對(duì)于只允許選擇一項(xiàng)的選擇框,訪問(wèn)選中項(xiàng)的最簡(jiǎn)單方式就是使用選擇框的selectedIndex屬性
var selectedOption=selectbox.opitons[selectbox,selectedIndex]添加選項(xiàng)
添加選項(xiàng)的方式有很多,第一種方式就是使用如下所示的DOM方法
var newOption=document.createElement("option"); newOption.appendChild(document.createTextNode("Option text")); newOption.setAttribute("value","Option value"); selectbox.appendChild(newOption);
第二種方式是使用Option構(gòu)造函數(shù)來(lái)創(chuàng)建新選項(xiàng)
var newOption=new Option("Option text","Option value"); selectbox.appendChild(newOption);//在IE8及之前版本中有問(wèn)題
第三種添加新選項(xiàng)的方式是使用選擇框的add()方法
var newOption=new Option("Option text","Option value"); selectbox.add(newOption,undefined);//最佳方案移除選項(xiàng)
removeChild()方法,移除選項(xiàng)
selectbox.removeChild(selectbox.options[0]);//移除第一個(gè)選項(xiàng)
remove()方法,移除選項(xiàng)
selectbox.remove(0);//移除第一個(gè)選項(xiàng)
將相應(yīng)的選項(xiàng)設(shè)置為null,移除選項(xiàng)
selectbox.options[0]=null;//移除第一個(gè)選項(xiàng)表單序列化
瀏覽器將數(shù)據(jù)發(fā)送給服務(wù)器
對(duì)表單字段的名稱和值進(jìn)行URL編碼,使用&符分隔
不發(fā)送禁用的表單字段
只發(fā)送勾選的復(fù)選框和單選按鈕
不發(fā)送type為"reset"和"button"的按鈕
多選選擇框中的每個(gè)選中的值多帶帶一個(gè)條目
在單擊提交按鈕提交表單的情況下,也會(huì)發(fā)送提交按鈕,否則不發(fā)送提交按鈕,也包括type為"image"的元素
function serialize(form){ var parts = [], field = null, i, len, j, optLen, option, optValue; for (i=0, len=form.elements.length; i < len; i++){ field = form.elements[i]; switch(field.type){ case "select-one": case "select-multiple": if (field.name.length){ for (j=0, optLen = field.options.length; j < optLen; j++){ option = field.options[j]; if (option.selected){ optValue = ""; if (option.hasAttribute){ optValue = (option.hasAttribute("value") ? option.value : option.text); } else { optValue = (option.attributes["value"].specified ? option.value : option.text); } parts.push(encodeURIComponent(field.name) + "=" + encodeURIComponent(optValue)); } } } break; case undefined: //字段集 case "file": //文件輸入 case "submit": //提交按鈕 case "reset": //重置按鈕 case "button": //自定義按鈕 break; case "radio": //單選按鈕 case "checkbox": //復(fù)選框 if (!field.checked){ break; } /* 執(zhí)行默認(rèn)操作 */ default: //不包含沒(méi)有名字的表單字段 if (field.name.length){ parts.push(encodeURIComponent(field.name) + "=" + encodeURIComponent(field.value)); } } } return parts.join("&"); }富文本編輯
富文本編輯,WYSIWYG(What You See Is What You Get)所見(jiàn)即所得
使用contenteditable
這個(gè)屬性時(shí)由IE最早實(shí)現(xiàn)的,可以把contenteditable屬性應(yīng)用給頁(yè)面中的任何元素,然后用戶立即就可以編輯該元素。這種方法之所以受到歡迎,是因?yàn)樗恍枰猧frame、空白頁(yè)和JavaScript,之喲啊哦為元素設(shè)置contenteditable屬性即可
操作富文本
與富文本編輯器交互的主要方式就是使用document.execCommand(),這個(gè)方法可以對(duì)文檔執(zhí)行預(yù)定義的命令,而且可以應(yīng)用大多數(shù)格式,可以為document.execCommand()方法傳遞3個(gè)參數(shù):要執(zhí)行的命令名稱、表示瀏覽器是否應(yīng)該為當(dāng)前命令提供用戶界面的一個(gè)布爾值和執(zhí)行命令必須的一個(gè)值,為了確保跨瀏覽器的兼容性,第二個(gè)參數(shù)應(yīng)該始終設(shè)置為false,因?yàn)镕irefox會(huì)在該參數(shù)為true時(shí)拋出錯(cuò)誤
每個(gè)Selection對(duì)象的屬性
anchorNode,選取起點(diǎn)所在的節(jié)點(diǎn)
anchorOffset,在到達(dá)選區(qū)起點(diǎn)位置之前跳過(guò)的anchorNode中的字符數(shù)量
focusNode,選區(qū)終點(diǎn)所在的節(jié)點(diǎn)
focusOffset,focusNode中包含在選區(qū)之內(nèi)的字符數(shù)量
isCollapse,布爾值,表示選區(qū)的起點(diǎn)和終點(diǎn)是否重合
rangeCount,選區(qū)中包含的DOM范圍的數(shù)量
對(duì)象的方法提供了更多信息,支持對(duì)選區(qū)的操作
addRange(range),將指定的 DOM 范圍添加到選區(qū)中。
collapse(node, offset),將選區(qū)折疊到指定節(jié)點(diǎn)中的相應(yīng)的文本偏移位置。
collapseToEnd(),將選區(qū)折疊到終點(diǎn)位置。
collapseToStart(),將選區(qū)折疊到起點(diǎn)位置。
containsNode(node),確定指定的節(jié)點(diǎn)是否包含在選區(qū)中。
deleteFromDocument(),從文檔中刪除選區(qū)中的文本,與document.execCommand("delete",false, null) 命令的結(jié)果相同。
extend(node, offset),通過(guò)將 focusNode 和 focusOffset 移動(dòng)到指定的值來(lái)擴(kuò)展選區(qū)。
getRangeAt(index),返回索引對(duì)應(yīng)的選區(qū)中的 DOM 范圍。
removeAllRanges(),從選區(qū)中移除所有 DOM 范圍。實(shí)際上,這樣會(huì)移除選區(qū),因?yàn)檫x區(qū)中至少要有一個(gè)范圍。
reomveRange(range),從選區(qū)中移除指定的 DOM 范圍。
selectAllChildren(node),清除選區(qū)并選擇指定節(jié)點(diǎn)的所有子節(jié)點(diǎn)。
toString(),返回選區(qū)所包含的文本內(nèi)容。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/97918.html
摘要:簡(jiǎn)介簡(jiǎn)史誕生于年,當(dāng)時(shí)主要負(fù)責(zé)表單的輸入驗(yàn)證。實(shí)現(xiàn)一個(gè)完整的由三部分組成核心文檔對(duì)象模型瀏覽器對(duì)象模型就是對(duì)實(shí)現(xiàn)該標(biāo)準(zhǔn)規(guī)定的各個(gè)方面內(nèi)容的語(yǔ)言的描述。把整個(gè)頁(yè)面映射為一個(gè)多層節(jié)點(diǎn)結(jié)構(gòu)。由萬(wàn)維網(wǎng)聯(lián)盟規(guī)劃。主要目標(biāo)是映射文檔的結(jié)構(gòu)。 JavaScript簡(jiǎn)介 JavaScript簡(jiǎn)史 JavaScript誕生于1995年,當(dāng)時(shí)主要負(fù)責(zé)表單的輸入驗(yàn)證。 如果沒(méi)有表單驗(yàn)證的功能,填入信息之...
摘要:腳本編程跨文檔消息傳遞跨文檔消息傳送,簡(jiǎn)稱為,指的是來(lái)自不同域的頁(yè)面間傳遞消息的核心是方法,在規(guī)范中,除了部分之外的其他部分也會(huì)提到這個(gè)方法名,但都是為了同一個(gè)目的,向另一個(gè)地方傳遞參數(shù)。第一個(gè)頁(yè)面加載時(shí)為空 HTML5腳本編程 跨文檔消息傳遞 跨文檔消息傳送,簡(jiǎn)稱為XMD,指的是來(lái)自不同域的頁(yè)面間傳遞消息 XMD的核心是postMessage()方法,在HTML5規(guī)范中,除了XDM...
摘要:在基于使用命名空間的文檔求值時(shí),需要使用對(duì)象。第四個(gè)參數(shù)的取值類型是下列常量之一,返回與表達(dá)式匹配的數(shù)據(jù)類型。,返回字符串值。這是最常用的結(jié)果類型。集合中節(jié)點(diǎn)的次序與它們?cè)谖臋n中的次序一致。 JavaScript與XML 瀏覽器對(duì)XML DOM的支持 DOM2級(jí)核心 在通過(guò)JavaScript處理XML時(shí),通常只使用參數(shù)root,因?yàn)檫@個(gè)參數(shù)指定的是XML DOM文檔元素的標(biāo)簽名 v...
摘要:能力檢測(cè)無(wú)法精確地檢測(cè)特定的瀏覽器和版本。用戶代理檢測(cè)通過(guò)檢測(cè)用戶代理字符串來(lái)識(shí)別瀏覽器。用戶代理檢測(cè)需要特殊的技巧,特別是要注意會(huì)隱瞞其用戶代理字符串的情況。 客戶端檢測(cè) 能力檢測(cè) 能力檢測(cè)的目的不是識(shí)別特定的瀏覽器,而是識(shí)別瀏覽器的能力,采用這種方式不必顧忌特定的瀏覽器,只要確定瀏覽器支持的特定的能力,就能給出解決方案,檢測(cè)基本模式 if(object.propertyInQu...
摘要:類型對(duì)象是的一個(gè)實(shí)例,表示整個(gè)頁(yè)面,而且,對(duì)象是對(duì)象的一個(gè)屬性,因此可以將其作為全局對(duì)象來(lái)訪問(wèn)。刪除指定位置的行。創(chuàng)建創(chuàng)建創(chuàng)建第一行創(chuàng)建第二行將表格添加到文檔主體中 DOM 節(jié)點(diǎn)層次 Node類型 DOM1級(jí)定義了一個(gè)Node接口,該接口將由DOM中的所有節(jié)點(diǎn)類型實(shí)現(xiàn) 節(jié)點(diǎn)類型由在Node類型中定義的12個(gè)數(shù)值常量來(lái)表示,任何節(jié)點(diǎn)類型必居其一 Node.ELEMENT_NODE(...
閱讀 3068·2021-11-18 10:02
閱讀 3339·2021-11-02 14:48
閱讀 3398·2019-08-30 13:52
閱讀 563·2019-08-29 17:10
閱讀 2089·2019-08-29 12:53
閱讀 1414·2019-08-29 12:53
閱讀 1035·2019-08-29 12:25
閱讀 2170·2019-08-29 12:17