input與change事件區別
關於標題中兩個事件的具體用法可以參閱如下兩篇文章:
(1).input事件參閱JavaScript input 事件一章節。
(2).change事件參閱JavaScript change 事件一章節。
兩個事件非常類似,甚至對於某些元素它們兩者的表現完全相同。
它們都可以在元素的值或者內容發生改變時觸發,但區別也是非常明顯。
區別主要表現的如下兩點:
(1).瀏覽器相容。
(2).事件觸發的時機。
(3).事件生效元素。
下面分別做一下介紹,以便在特定的需求選取恰當的事件。
一.瀏覽器相容性:
(1).change事件相容所有主流瀏覽器。
(2).input事件被IE9+和其他標準瀏覽器支援。
特別說明:propertychange事件與input事件類似,可以實時觸發,但是僅IE支援。
所以可以利用propertychange事件input的事件的全相容效果。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <script> window.onload=function(){ let otxt=document.getElementById("txt"); let oshow=document.getElementById("show"); let count=0; if(document.all){ otxt.onpropertychange=function(){ count=count+1; oshow.innerHTML=count; } } else{ otxt.oninput=function(){ count=count+1; oshow.innerHTML=count; } } } </script> </head> <body> <div id="show"></div> <input type="text" id="txt"/> </body> </html>
上述程式碼實現了全相容效果,能夠實時計算出輸入文字框字元的數量。
二.觸發時機:
對於change事件:
(1).單行文字域與多行文字域,當修改它們的值後,並不能立即觸發事件,而是焦點離開它們才能觸發。
(2).單行文字域與多行文字域修改前與修改後的值不能相同,否則不能觸發。
對於input事件:
(1).事件會同步觸發,一旦值改變立即觸發。
對於select下拉選單、核取方塊和單選按鈕等元素,只要它們的狀態發生改變,兩個事件都會觸發,表現相同。
三.設定contenteditable為true的元素:
在HTML5之前,div等類似元素是不可編輯的,這幾乎是定論。
但是在HTML5之後,一切都發生了改變。
只要為此類元素新增contenteditable屬性(預設值為true),那麼這些元素都變為可編輯的。
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> #one,#two{ width:150px; height:60px; margin:5px; background-color:#ccc; } </style> <script> window.onload=function(){ let count=0; one.oninput=function(){ show.innerHTML=++count+"input"; } two.onchange=function(){ show.innerHTML=++count+"change"; } } </script> </head> <body> <div id="one" contenteditable></div> <div id="two" contenteditable></div> <div id="show"></div> </body> </html>
程式碼分析如下:
(1).首先將兩個div元素設定為可編輯狀態。
(2).然後兩個div元素分別註冊input與change事件。
(3).當編輯div元素中內容的時候,input事件會同步觸發,然而change事件不會觸發。
特別說明:id屬性值由於在文件中是唯一的,所以可以直接作為對應的元素物件使用。
相關閱讀:
(1).innerHTML屬性可以參閱JavaScript innerHTML一章節。
(2).contenteditable屬性可以參閱HTML contenteditable 屬性一章節。
相關文章
- touch事件與click事件區別事件
- loadend 與 load 事件區別事件
- JavaScript change 事件JavaScript事件
- onclick與click事件的區別事件
- HDFS 塊和 Input Splits 的區別與聯絡
- mysql alter modify 和 change的區別MySql
- React事件與普通HTML事件有什麼區別React事件HTML
- angular input 為file on-change 無效Angular
- 安卓觸控事件與單擊事件的區別安卓事件
- 事件風暴EventStorming與事件建模EventModeling的區別 | rafalmaciag事件ORMMac
- JavaScript input 事件JavaScript事件
- Python2 中 input() 和 raw_input() 的區別Python
- 資料庫中modify和change的區別資料庫
- <button>和<input type=“button“> 的區別
- input屬性disabled和readonly的區別(轉)
- 【.NET】多執行緒:自動重置事件與手動重置事件的區別執行緒事件
- OO ALV 強制觸發 data_change事件事件
- 瀏覽器與Node的事件迴圈(Event Loop)有何區別?瀏覽器事件OOP
- input輸入框的各種事件事件
- 命令和事件有什麼區別? - Oskar事件
- element-UI change 事件傳遞自定義引數UI事件
- ??與?:的區別
- button 和input 的區別及在表單form中的用法ORM
- Nuxt.js 應用中的 webpack:change 事件鉤子UXJSWeb事件
- mouseenter與mouseover區別
- currentTarget與target區別
- mouseout與mouseleave區別
- classList與className區別
- innerText與textContent區別
- GET與POST區別
- let與const區別
- NIO與IO區別
- 區別mouseover與mouseenter?
- ApplicationContext 與 BeanFactory 區別APPContextBean
- setInterval()與setTimeout()區別
- match()與exec()區別
- localStorage與sessionStorage 區別Session
- showModal()與show() 區別