1. 程式人生 > >Js(Jquery)實時監聽input輸入框值的變化

Js(Jquery)實時監聽input輸入框值的變化

效果圖
在這裡插入圖片描述
Js寫法

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<input type="text" oninput="OnInput (event)" onpropertychange="OnPropChanged (event)" value="Text field" />
</body>

<script type="text/javascript">
	// Firefox, Google Chrome, Opera, Safari, Internet Explorer from version 9
        function OnInput (event) {
        	console.log(event.target.value);
        }
    // Internet Explorer
        function OnPropChanged (event) {
            if (event.propertyName.toLowerCase () == "value") {
            	console.log(event.srcElement.value);
            }
        }
</script>
</html>

Jquery寫法

$("#input1").bind("input propertychange",function(event){
       console.log($("#input1").val())
});

原理
一、首先分清下面幾個概念:

  1. onchange事件:此事件會在元素內容發生改變,且失去焦點的時候觸發。瀏覽器支援度較好。
  2. onpropertychange事件:此事件會在元素內容發生改變時立即觸發,即便是通過js改變的內容也會觸發此事件。元素的任何屬性改變都會觸發該事件,不止是value。只有IE11以下瀏覽器支援此事件。
  3. oninput事件:此事件會在value屬性值發生改變時觸發,通過js改變value屬性值不會觸發此事件。只有IE8以上或者谷歌火狐等標準瀏覽器支援。

二、然後我們主要是結合 HTML5 標準事件 oninput 和 IE 專屬事件 onpropertychange 事件來監聽輸入框值變化。
oninput 是 HTML5 的標準事件,對於檢測 textarea, input:text, input:password 和 input:search 這幾個元素通過使用者介面發生的內容變化非常有用,在內容修改後立即被觸發,不像 onchange 事件需要失去焦點才觸發。不過oninput 事件在 IE9 以下版本不支援,需要使用 IE 特有的 onpropertychange 事件替代。所以就有了以上的寫法。