首頁  >  文章  >  web前端  >  JavaScript中關於表單的詳細介紹

JavaScript中關於表單的詳細介紹

黄舟
黄舟原創
2017-08-13 10:30:342102瀏覽

JavaScript表單

這篇文章的主要目的是介紹表單相關的知識,如表單基礎知識、文字方塊腳本相關用法、選擇框腳本相關用法以及等知識。雖然在現代web開發中,很少會使用form預設行為提交表單數據,而是會停用預設行為,然後使用Ajax方式透過POST請求非同步提交表單數據。但這並不代表form表單不重要了。 form表單仍然是提交表單最快的方式,因為JavaScript提供了許多屬性和方法讓我們快速取得表單欄位的值。所以,對form的理解和掌握還是有必要的。

目錄:JavaScript表單

  • form表單

    • 方法

    • 事件

  • form表單欄位(表單欄位包含input, button, select, textarea, 下列屬性方法事件為所有表單欄位共有)

    • #屬性

    • #事件

  • 文字方塊(input, textarea)

    • 選擇文字

    • 過濾輸入

    • 自動切換焦點

    • 屬性

    • 實際應用

選擇框(select, option)

form表單

取得HTML中的Form標籤可以透過id、class、name屬性取得,或直接透過form標籤取得。當然,也可以使用
document.forms
來取得HTML中所有表單元素,會傳回一個NodeList物件。

屬性

說一個重要的

elements:
document.forms[0].elements
傳回類別數組對象,包含該form表單下所有表單欄位。可以透過表單欄位的name屬性或索引存取.

let form = document.forms[0]
form.element[0] === form.element['index-0']

方法
在form表單上的方法有submit、reset方法。在現代web開發中,都會阻止form表單提交的預設行為。當沒有參數時,可以在不點擊按鈕的情況下將所有表單欄位的值向伺服器提交資料。通常,存在以下三種按鈕可以提交表單資料。

<input type="submit" value=&#39;提交&#39; />
<button type=&#39;submit&#39;>提交</button>
<input type="image" src=&#39;pic.png&#39; />

事件

submit: 當給form表單綁定submit事件,在點擊圖片按鈕或type為submit的按鈕會提交表單資料。此時可以透過事件物件阻止表單全域提交的預設行為。在提交表單時,為避免使用者多次點擊導致多次提交的問題,可以在提交後停用提交按鈕。
form表單欄位

屬性
  • 都比較簡單,有如下:

  • ##name
  • #value
  • form: 指向目前表單元素,唯讀。
  • type
  • readOnly
  • disabled
  • autofocus: 自動獲得焦點。 HTML5新增屬性。

    6b3d0aed2988a64f0341f01b7609b8c3
  • 。支援此事件的瀏覽器包括IE10+、Chrome、Firefox。所以支援的瀏覽器的autofocus會回傳true,不支援時會回傳空字串。

方法

focus()、blur():通常會結合blur方法使用。例如在DOMContentLoaded事件之後讓某個input元素獲得焦點,讓使用者可以直接輸入。
document.addEventLitener(&#39;DOMContentLoaded&#39;, e => {
    let input = docuemnt.querySelector(&#39;.input-1&#39;)
    input.focus()
}, false)

事件

focus、blur事件:在實際業務中,可以結合使用focus和blur事件。如input節點獲得焦點時,改變input元素顏色。在失去焦點時,將背景顏色重設。

let input = document.querySelector(&#39;.input-0&#39;)
input.addEventListener(&#39;focus&#39;, e => {
    e.target.style.backgroundColor = &#39;#ccc&#39;
}, false)
input.addEventListener(&#39;blur&#39;, e => {
    e.target.style.backgroundColor = &#39;#fff&#39;
}, false)

change事件:對於input和textarea元素,當它們從獲得焦點到失去焦點並且value值發生改變時,才會觸發change事件。而對於select元素,只要value值改變時就會觸發change事件。換句話說,沒有失去焦點也會觸發change事件。這個細節需要注意。

文字方塊(input, textarea)

除了上述表單欄位的共有屬性和方法之外,文字方塊存在著自己的一些屬性和操作文字的一些方法。
    屬性
  • maxlength: 最大輸入長度
  • size: 文字方塊中能夠顯示的字元數
  • cols: textarea列數
  • ## 行數
  • ······· 以下皆為HTML5新增的約束驗證API······
  • reqiured: 必填選項。
  • type
    • email: 預設驗證
    • url: url模式
    • number: 只能輸入數字
  • #pattern: 其實就是在HTML裡使用正規表示式。 IE10+以上瀏覽器支援。
  • ###checkValidity方法:在document.forms[0]上綁定此方法,可以偵測整個form表單欄位是否有效。如果有效,則傳回true。否則回傳false。 ###
    // type为number时,可以指定min,max,step(表示某个值得倍数)属性
    <input type="number" min=&#39;0&#39; max=&#39;100&#39; step=&#39;5&#39; name=&#39;count&#39;>
    // 此时正则默认添加了^, $,即以下正则等于&#39;^\d+$&#39;
    <input type=&#39;text&#39; pattern=&#39;\d+&#39;>
实际应用

选择文本

1.select方法:input和textarea元素都支持selct方法。这个方法不接受任何参数,表示选择某个文本框元素的所有文本

// 当input元素获得焦点是选择文本
let input = document.querySelector(&#39;.input-1&#39;)
input.addEventListener(&#39;focus&#39;, e => {
    e.target.select()
}, false)

2.setSelectionRange方法:这个方法用于选择部分文本内容。接受两个参数,起始位置和结束位置。HTML5新增的方法。IE9+以上浏览器支持。

// 当input获得焦点时,选择文本中的第二个值
let input = document.querySelector(&#39;.input-1&#39;)
input.addEventListener(&#39;focus&#39;, e => {
  let target = e.target
  console.log(target.setSelectionRange(1, 2))
}, false)

3.select事件:当文本框元素中的文本被选中时,就会触发select事件。只要选中文本就会触发,不需要全选。

4.selectionStart, selectionEnd属性:这两个属性用于或者用户选中的文本内容。因此,可以与select事件结合使用,获取用户选中的文本内容。HTML5新增的两个属性。IE9+以上浏览器支持。

let input = document.querySelector(&#39;.input-1&#39;)
input.addEventListener(&#39;select&#39;, e => {
    let target = e.target
    let start = target.selectionStart
    let end = target.selectionEnd
    console.log(target.value.slice(start, end))
}, false)

过滤输入

文本框的过滤输入主要是某些文本的输入是有条件的。比如说需要input元素中只允许输入数字。这时候就需要用到文本的过滤。基本思路如下

1.通过监听keypress事件,判断输入时的字符是否是数字。通过charCode判断。keypress事件会在用户按下键盘上的【字符键】时触发。

2.如果不是,则取消默认行为,即取消文本的输入。

let input = document.querySelector(&#39;.input-1&#39;)
input.addEventListener(&#39;keypress&#39;, e => {
  let charCode = e.charCode
  if (!/[\d+.+-]/g.test(String.fromCharCode(charCode))) {
    e.preventDefault()
  }
}, false)

此方法通过charCode属性来判断用户输入的字符是否是数字字符,如果是则可以输入,如果不是则禁止输入。这里要注意的是,不能通过input的value属性来判断。因为keydown和keypress事件会在value改变之前触发,而keyup事件则是在value发生改变之后触发。因此,keypress获取value值是上一次的值,但是keypress事件可以获取到按下键盘时的charCode属性,然后通过String对象的fromCharCode转成对应的字符,根据此字符做一次正则验证即可。同时,charCode属性只有在keypress事件才存在,在keydown和keyup事件中都会返回0。

自动切换焦点

这种应用主要用于手机号码上。如手机号码可以分为'334'的结构。因此可以创建三个input,当输入完毕时自动切换焦点到下一个input上。

// 必须设置最大值
<input type="text" name=&#39;text1&#39; maxlength="3">
<input type="text" name=&#39;text2&#39; maxlength="3">
<input type="text" name=&#39;text3&#39; maxlength="4">
// 当value的length等于maxleng时,发生跳转
function judge (len, max, target, form) {
  if (len === max) {
    let length = form.elements.length
    for (let i = 0; i < length; i++) {
      if (target === form.elements[i]) {
        if (form.elements[i + 1]) {
          form.elements[i + 1].focus()
        }
      }
    }
  }
}
// 给三个input绑定keyup事件,通过事件代理方式。
document.addEventListener(&#39;keyup&#39;, e => {
  let target = e.target
  let form = target.form
  let len = target.value.length
  let maxLen = target.maxLength
  switch (target.name) {
    case &#39;text1&#39;:
      judge(len, maxLen, target, form)
      break
    case &#39;text2&#39;:
      judge(len, maxLen, target, form)
      break
    case &#39;text3&#39;:
      judge(len, maxLen, target, form)
      break
  }
}, false)

选择框(select, option)

选择框是通过select和option元素组合而成的。除了表单字段共有的属性和方法之外,在这两个元素上提供了其他的属性和方法。目的是为了更加方便的操作选择框元素。

select元素
  • add(newOption, targetOption):在select元素上有add方法,向select元素插入新的option元素。传入两个参数:新的option元素和目标option元素。

  • multiple属性: 是否允许多项选择。如果未添加此属性,则select元素的type属性为'select-one'。否则为'select-multiple'。

  • options属性:取得该select元素下的所有options元素。返回一个类数组对象。

  • selectedIndex属性: 选中options元素的索引值。

  • size属性: 可见的行数

  • value属性: 发送到服务器的值,如果没有这个属性,则会取innerText的值。

option元素
  • index: 索引值

  • label: 当前选项的标签

  • selected: 被选中的option元素

  • text: 文本

  • value: 发送到服务器的值

以上是JavaScript中關於表單的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn