摘要:文本框腳本有兩種方式表現(xiàn)文本框的單行文本框和的多行文本框。對(duì)于單行文本框,通過特性可以指定文本框能夠顯示的字符數(shù),通過特性訪問其內(nèi)容,而則用于指定其可以接受的最大字符數(shù)。
title: 表單腳本
date: 2016-12-19 15:17
tags: JavaScript
在 HTML 中,表單由 元素來表示,但是在 JavaScript 中,表單對(duì)應(yīng)的是 HTMLFormElement 類型,它具有的一些獨(dú)有的屬性和方法。
action: 接收請(qǐng)求的 URL
elements: form 中所有控件的集合
length: form 中控件的數(shù)量
method: 要發(fā)送的 HTTP 請(qǐng)求類型
name: 表單的名稱
reset(): 重置 form 域?yàn)槟J(rèn)值
submit(): 提交 form
target: 用于發(fā)送請(qǐng)求和接收響應(yīng)的窗口的名稱
acceptCharset: 服務(wù)器能夠處理的字符集
enctype: 請(qǐng)求的編碼類型。
查找表單// 通過 ID 查找 var form = document.querySelector("#form1"); // 通過 document.forms 集合查找 var firstForm = document.forms[0] // 索引查找 var myForm = document.forms["form2"] // 取得 name 為 form2 的表單提交表單
// 通用提交表單 // 自定義提交表單 // 圖像按鈕阻止表單提交的默認(rèn)行為
var form = document.querySelector("#myForm") EventUtil.addHandler(form, "submit", function(event){ // 取得事件對(duì)象 event = EventUtil.getEvent(event) var target = EventUntil.getTarget(event) // 阻止默認(rèn)事件 EventUtil.preventDefault(event); // 取得提交按鈕 var btn = target.elements["submit-btn"] // 驗(yàn)證表單 // do something // 禁用提交按鈕 btn.disabled = true })
為避免用戶重復(fù)提交,應(yīng)該在第一次提交表單以后就禁用提交按鈕,或者利用 onsubmit 事件處理程序取消后續(xù)的表單提交操作
如上,要在第一次點(diǎn)擊后就禁止提交,只需要監(jiān)聽 submit 事件,并在該事件發(fā)生時(shí)禁用提交表單按鈕即可。
表單字段通過 form 的 elements 屬性可以獲得所有表單字段,然后可以安裝索引或者 name 特性來訪問它們。
如果多個(gè)表單控件都使用一個(gè) name ,那么會(huì)放回一改 name 命名的一個(gè) NodeList 集合
共有的表單字段屬性:
disabled: 布爾值,表示當(dāng)前字段是否被禁用
form: 指向所屬的 form
name: 當(dāng)前字段的名稱
type: 當(dāng)前字段的類型
除了 之外,所有的表單都有 type 屬性,對(duì)于 元素,
該值等于 HTML 的 type 值。
對(duì)于
:type 屬性值 select-one
:type 屬性值 select-multiple
每個(gè)表單字段都有兩個(gè)方法:focus() 和 blur() 方法。
此外,所有表單字段都支持下列 3 個(gè)事件:
blur: 字段失去焦點(diǎn)時(shí) 觸發(fā)
focus: 字段獲得焦點(diǎn)時(shí)觸發(fā)
change: 對(duì)于 和 元素,在它們失去焦點(diǎn)且 value 值改變時(shí)觸發(fā);對(duì)于 元素,在其選項(xiàng)改變時(shí)觸發(fā)。
0x01 文本框腳本有兩種方式表現(xiàn)文本框: 的單行文本框和
對(duì)于單行文本框,通過 size 特性可以指定文本框能夠顯示的字符數(shù),通過 value 特性訪問其內(nèi)容,而maxlength則用于指定其可以接受的最大字符數(shù)。
相對(duì)于 要指定文本框的大小可以使用 rows 和 cols 特性。
選擇文本和 都支持 select() 方法用于選中所有文本,而與此對(duì)應(yīng)的是 select 事件。
select事件在選中文本的時(shí)候就會(huì)觸發(fā)
var textbox = form.elements["textbox"] textbox.onselect = function(){ alert(textbox.value) }
但是通過 select 事件只能確定用戶何時(shí)選擇了文本,卻不知道用戶到底選擇了哪些文本,基于此 HTML5 添加了 selectionStart 和 selectionEnd 方法。
要取得用戶在文本框中選取的文本,可以使用如下方法:
textbox.onselect = function(){ alert(textbox.value.substring(textbox.selectionStart, textbox.selectionEnd)) }HTML5 約束驗(yàn)證 API
任何標(biāo)注有 required 的字段,在提交表單時(shí)都不能空著。
該屬性適用于 ,, 字段。
選擇框通過 元素和 元素創(chuàng)建,它們同屬于 HTMLSelectElement 類型,為了方便交互,該類型提供了如下屬性:
add(newOption, relOption): 插入新的 元素,在相關(guān)項(xiàng)之前
multiple: 布爾值,是否允許多項(xiàng)選擇
options: 所有的 元素集合
remove(index): 移除給定位置的索引項(xiàng)
選擇框 的 type 屬性值不是 select-one 即是 select-muitiple
為了便于訪問數(shù)據(jù),每個(gè) 元素都有一個(gè) HTMLOptionElement 對(duì)象,該對(duì)象具有如下屬性:
index: 當(dāng)前選擇項(xiàng)在 options 集合中的索引
selected: 布爾值,表示當(dāng)前選項(xiàng)是否被選中
select: 選項(xiàng)的文本
value: 選項(xiàng)的值
選擇項(xiàng)元素的值,就是選中的 元素的 value 特性值。如果沒有 value 特性,則是 元素的文本值
對(duì)于只能選擇一項(xiàng)的選擇框,最簡單的方式就是使用 selectedIndex 屬性:
var selectedOption = selectbox.options[selectbox.selectedIndex]
而對(duì)于可以選擇多項(xiàng)的選擇框,我們需要循環(huán)遍歷選擇集合,然后測(cè)試每個(gè)選擇項(xiàng)的 seleted 屬性
function getSelectedOption(selectBox){ var result = new Array() var option = null for(let i=0,len = selectBox.options.length;i < len;i++){ option = selectBox.options[i] if(option.selected){ result.push(option) } } return result } var selectBox = document.querySelector("#selectBox") var selectedOptions = getSelectedOption(selectBox) // 獲得所有被選中的項(xiàng)0x03 表單序列化
在表單對(duì)服務(wù)器發(fā)送數(shù)據(jù)之前,需要將表單中的有效數(shù)據(jù)進(jìn)行格式化的編碼,即表單序列化。
下面的 serialize 函數(shù)可以實(shí)現(xiàn)表單的序列化操作:
function serialize(form){ let parts = [],field = null, i, len, j, optLen, option, optValue; for(i =0, len = form.elements.length; i在整個(gè)表單序列化的過程中,稍微復(fù)雜一點(diǎn)的就是 元素了,它能是單選框或者多選框,那么我們需要去遍歷控件中的每一項(xiàng)。當(dāng)不存在 value 特性時(shí),使用 text 的值,我們使用了 hasAttribute() ,而在 IE 中需要使用 specified 特性。
對(duì)于單選按鈕和復(fù)選按鈕,需要檢查其 checked 屬性書否為 false,是則退出 switch 循環(huán)。若為 true 則將其鍵值對(duì)進(jìn)行編碼,推到 parts 數(shù)組。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/86568.html
摘要:處理表格和提交等等重置表單重置表單應(yīng)該使用或當(dāng)用戶單擊重置按鈕重置表單時(shí),會(huì)觸發(fā)事件,可以在必要的時(shí)候取消重置操作另外也可以通過腳本調(diào)用方法重置表單,在調(diào)用方法重置表單時(shí)會(huì)觸發(fā)事件。在中,表單中新增加了屬性,自動(dòng)把焦點(diǎn)移動(dòng)到相應(yīng)字段。 HTMLFormElement繼承了HTMLElement,它自己獨(dú)有的屬性和方法有: acceptCharset:服務(wù)器能夠處理的字符集,等價(jià)于HT...
摘要:表單如果表單內(nèi)沒有按鈕,只有元素,那么這個(gè)可以升級(jí)為按鈕。輸入框選中高亮,輸入非數(shù)字,改變顏色可設(shè)置,不能設(shè)置而則可以,但不能設(shè)置最大字符數(shù)。 form 表單 如果form表單內(nèi)沒有submit按鈕,只有button元素,那么這個(gè)button可以升級(jí)為submit按鈕。 form 表單用來向服務(wù)器提交信息,常用屬性 action:提交表單的地址 name:頁面中可能不止一個(gè)表單,...
摘要:文本框獲得焦點(diǎn)時(shí),選中其中所有的文本思路利用焦點(diǎn)事件事件,在文本框獲得焦點(diǎn)時(shí),利用其方法選中所有文本。自動(dòng)切換焦點(diǎn)思路利用事件檢測(cè)用戶輸入新字符后,文本框內(nèi)的字符串是否已經(jīng)達(dá)到最大長度,若達(dá)到最大長度,則將焦點(diǎn)切換至下一個(gè)文本框。 JavaScript 表單腳本 通過 document.forms 可以獲得一個(gè)包含當(dāng)前頁面中所有表單的集合 HTMLFormElement 接口 下面是這...
摘要:瀏覽器如何將數(shù)據(jù)發(fā)送給服務(wù)器對(duì)表單字段的名稱和值進(jìn)行編碼,使用和號(hào)分隔不發(fā)送禁用的表單字段只發(fā)送勾選的復(fù)選框和單選按鈕不發(fā)送為和的按鈕多選框中每個(gè)選中的值單獨(dú)一個(gè)條目在單擊提交按鈕提交表單的情況下,也會(huì)發(fā)送提交按鈕。否則不發(fā)送提交按鈕。 瀏覽器如何將數(shù)據(jù)發(fā)送給服務(wù)器: 對(duì)表單字段的名稱和值進(jìn)行URL編碼,使用和號(hào)(&)分隔 不發(fā)送禁用的表單字段 只發(fā)送勾選的復(fù)選框和單選按鈕 不發(fā)送t...
閱讀 2942·2021-11-24 09:39
閱讀 1197·2021-11-02 14:38
閱讀 4214·2021-09-10 11:26
閱讀 2785·2021-08-25 09:40
閱讀 2341·2019-08-30 15:54
閱讀 507·2019-08-30 10:56
閱讀 2799·2019-08-26 12:14
閱讀 3246·2019-08-26 12:13