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