表單腳本 表單的基礎知識
HTMLFormElement有自己獨特的屬性和方法
acceptCharset,服務器能夠處理的字符集,等價于HTML中的accept-charset特性
action,接受請求的URL,等價于HTML中的action特性
elements,表單中所有控件的集合
enctype,請求的編碼類型,等價于HTML中的enctype特性
length,表單中控件的數量
method,要發送的HTTP請求類型,通常是"get"或"post",等價于HTML的method特性
name,表單的名稱,等價于HTML的name特性
reset(),將所有表單域重置為默認值
submit(),提交表單
target(),用于發送請求和接收響應的窗口名稱,等級與HTML的target特性
提交表單
用戶單擊提交按鈕或者圖像按鈕時,就會提交表單,使用或
阻止表單提交代碼
var form=document.getElelemtById("myForm"); EventUtil.addHandler(form,"submit",function(event){ //取得事件對象 event=EventUtil.getEvent(event); //阻止默認事件 EventUtil.preventDefault(event); })
以編程方式提交表單,不會觸發submit事件,因此調用方法之前要先驗證表單數據
var form=document.getElementById("muForm"); //提交表單 form.submit();
提交表單時,可能出現最大的問題就是重復提交表單,在第一次提交表單之后,如果長時間沒有反應,用戶可能會反復單擊提交按鈕。解決辦法兩個,第一次提交之后就禁用提交按鈕,或者利用onsubmit事件處理程序取消后續的表單提交操作
重置表單
在用戶單擊重置按鈕時,表單會被重置,使用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();
與調用submit()方法不同,調用submit方法會像單擊按鈕一樣觸發reset事件
表單字段
表單字段公有的屬性
disabled,布爾值,表示當前字段是否被禁用
form,指向當前字段所屬表單的指針。只讀
name,當前字段的名稱
readOnly,布爾值,表示當前字段是否只讀
tabIndex,表示當前字段的切換序號
type,當前字段類型,如CheckBox
value當前字段將被提交給服務器的值
公有的表單字段方法
每個表單都有兩個方法,focus()和blur(),其中focus()方法用于將瀏覽器的焦點設置到表單字段,即激活字段,使其可以響應鍵盤事件。在調用blur方法時,并不會把焦點轉移到某個特定的元素上,僅僅是將焦點從調用這個方法的元素上移走
公有的表單字段事件
blur,當前字段失去焦點時觸發
change,對于input和textarea元素,在失去焦點且value值改變時觸發,對于select元素,在選擇選項時觸發
focus,當前字段獲得焦點時觸發
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()方法對應的是一個select事件,選擇文本框中的文本時,就會觸發select事件
添加兩個屬性:selectionStart和selectionEnd,保存的是基于0的數值,表示選擇文本的范圍
所有文本框都有一個setSelectionRange()方法,接收兩個參數:要選擇的第一個字符的索引和要選擇的最后一個字符之后的字符的索引
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,在發生復制操作前觸發
copy,在發生復制操作時觸發
beforecut,在發生剪切操作前觸發
cut,在發生剪切操作時觸發
beforepaste,在發生粘貼操作前觸發
paste,在發生粘貼操作時觸發
自動切換焦點(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約束驗證API
必填字段
指定required屬性
其他輸入類型
新增email和url等類型
數值范圍
number,range,datetime,datetime-local,date,mouth,week,time等
輸入模式
pattern屬性,這個屬性的值是一個正則表達式,用于匹配文本框中的值
檢測有效性
checkValidty()方法,檢測表單匯總某個字段是否有效,所有表單字段都有這個方法,如果字段有效,返回true,反之返回false
if (document.forms[0].elements[0].checkValidity()){ //字段有效,繼續 } else { //字段無效 }
customError,如果設置了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,如果標注為required的字段中滅有值,返回true
通過設置novalidate屬性,可以告訴表單不進行驗證
選擇框腳本
HTMLSelectElement類型提供的屬性和方法
add(newOption, relOption),向控件中插入新
multiple,布爾值,表示是否允許多項選擇;等價于 HTML 中的 multiple 特性。
options,控件中所有
remove(index),移除給定位置的選項。
selectedIndex,基于 0 的選中項的索引,如果沒有選中項,則值為-1。對于支持多選的控件,只保存選中項中第一項的索引。
size,選擇框中可見的行數;等價于 HTML 中的 size 特性
選擇框的value屬性由當前選中項決定,相應規則
如果沒有選中的項,則選擇框的 value 屬性保存空字符串。
如果有一個選中項,而且該項的 value 特性已經在 HTML 中指定,則選擇框的 value 屬性等于選中項的 value 特性。即使 value 特性的值是空字符串,也同樣遵循此條規則。
如果有一個選中項,但該項的 value 特性在 HTML 中未指定,則選擇框的 value 屬性等于該項的文本。
如果有多個選中項,則選擇框的 value 屬性將依據前兩條規則取得第一個選中項的值。
為了便于訪問數據,HTMLOptionElement對象添加下列屬性
index,當前選項在option集合中的索引
label,當前選項的標簽,等價于HTML中的label特性
selected,布爾值,表示當前選項是否被選中,將這個屬性設置為true可以選中當前選項
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構造函數來創建新選項
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);//移除第一個選項
將相應的選項設置為null,移除選項
selectbox.options[0]=null;//移除第一個選項表單序列化
瀏覽器將數據發送給服務器
對表單字段的名稱和值進行URL編碼,使用&符分隔
不發送禁用的表單字段
只發送勾選的復選框和單選按鈕
不發送type為"reset"和"button"的按鈕
多選選擇框中的每個選中的值多帶帶一個條目
在單擊提交按鈕提交表單的情況下,也會發送提交按鈕,否則不發送提交按鈕,也包括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": //復選框 if (!field.checked){ break; } /* 執行默認操作 */ 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最早實現的,可以把contenteditable屬性應用給頁面中的任何元素,然后用戶立即就可以編輯該元素。這種方法之所以受到歡迎,是因為它不需要iframe、空白頁和JavaScript,之喲啊哦為元素設置contenteditable屬性即可
操作富文本
與富文本編輯器交互的主要方式就是使用document.execCommand(),這個方法可以對文檔執行預定義的命令,而且可以應用大多數格式,可以為document.execCommand()方法傳遞3個參數:要執行的命令名稱、表示瀏覽器是否應該為當前命令提供用戶界面的一個布爾值和執行命令必須的一個值,為了確保跨瀏覽器的兼容性,第二個參數應該始終設置為false,因為Firefox會在該參數為true時拋出錯誤
每個Selection對象的屬性
anchorNode,選取起點所在的節點
anchorOffset,在到達選區起點位置之前跳過的anchorNode中的字符數量
focusNode,選區終點所在的節點
focusOffset,focusNode中包含在選區之內的字符數量
isCollapse,布爾值,表示選區的起點和終點是否重合
rangeCount,選區中包含的DOM范圍的數量
對象的方法提供了更多信息,支持對選區的操作
addRange(range),將指定的 DOM 范圍添加到選區中。
collapse(node, offset),將選區折疊到指定節點中的相應的文本偏移位置。
collapseToEnd(),將選區折疊到終點位置。
collapseToStart(),將選區折疊到起點位置。
containsNode(node),確定指定的節點是否包含在選區中。
deleteFromDocument(),從文檔中刪除選區中的文本,與document.execCommand("delete",false, null) 命令的結果相同。
extend(node, offset),通過將 focusNode 和 focusOffset 移動到指定的值來擴展選區。
getRangeAt(index),返回索引對應的選區中的 DOM 范圍。
removeAllRanges(),從選區中移除所有 DOM 范圍。實際上,這樣會移除選區,因為選區中至少要有一個范圍。
reomveRange(range),從選區中移除指定的 DOM 范圍。
selectAllChildren(node),清除選區并選擇指定節點的所有子節點。
toString(),返回選區所包含的文本內容。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/97918.html
摘要:簡介簡史誕生于年,當時主要負責表單的輸入驗證。實現一個完整的由三部分組成核心文檔對象模型瀏覽器對象模型就是對實現該標準規定的各個方面內容的語言的描述。把整個頁面映射為一個多層節點結構。由萬維網聯盟規劃。主要目標是映射文檔的結構。 JavaScript簡介 JavaScript簡史 JavaScript誕生于1995年,當時主要負責表單的輸入驗證。 如果沒有表單驗證的功能,填入信息之...
摘要:腳本編程跨文檔消息傳遞跨文檔消息傳送,簡稱為,指的是來自不同域的頁面間傳遞消息的核心是方法,在規范中,除了部分之外的其他部分也會提到這個方法名,但都是為了同一個目的,向另一個地方傳遞參數。第一個頁面加載時為空 HTML5腳本編程 跨文檔消息傳遞 跨文檔消息傳送,簡稱為XMD,指的是來自不同域的頁面間傳遞消息 XMD的核心是postMessage()方法,在HTML5規范中,除了XDM...
摘要:在基于使用命名空間的文檔求值時,需要使用對象。第四個參數的取值類型是下列常量之一,返回與表達式匹配的數據類型。,返回字符串值。這是最常用的結果類型。集合中節點的次序與它們在文檔中的次序一致。 JavaScript與XML 瀏覽器對XML DOM的支持 DOM2級核心 在通過JavaScript處理XML時,通常只使用參數root,因為這個參數指定的是XML DOM文檔元素的標簽名 v...
摘要:能力檢測無法精確地檢測特定的瀏覽器和版本。用戶代理檢測通過檢測用戶代理字符串來識別瀏覽器。用戶代理檢測需要特殊的技巧,特別是要注意會隱瞞其用戶代理字符串的情況。 客戶端檢測 能力檢測 能力檢測的目的不是識別特定的瀏覽器,而是識別瀏覽器的能力,采用這種方式不必顧忌特定的瀏覽器,只要確定瀏覽器支持的特定的能力,就能給出解決方案,檢測基本模式 if(object.propertyInQu...
摘要:類型對象是的一個實例,表示整個頁面,而且,對象是對象的一個屬性,因此可以將其作為全局對象來訪問。刪除指定位置的行。創建創建創建第一行創建第二行將表格添加到文檔主體中 DOM 節點層次 Node類型 DOM1級定義了一個Node接口,該接口將由DOM中的所有節點類型實現 節點類型由在Node類型中定義的12個數值常量來表示,任何節點類型必居其一 Node.ELEMENT_NODE(...
閱讀 3049·2021-11-18 10:02
閱讀 3315·2021-11-02 14:48
閱讀 3384·2019-08-30 13:52
閱讀 527·2019-08-29 17:10
閱讀 2070·2019-08-29 12:53
閱讀 1392·2019-08-29 12:53
閱讀 1018·2019-08-29 12:25
閱讀 2155·2019-08-29 12:17