文本框的onchange事件,如何兼容各大瀏覽器


在項目中經常會遇到對用戶輸入的數據進行實時校驗,而不是等文本框失去焦點或用戶手動點擊校驗。

首先分析下在哪些情況下文本框會產生change事件。

1、用戶通過鍵盤入正常字符時;

2、用戶通過鍵盤輸入非正常字符時 ctrl+v ctrl+x ctrl+z delete Backspace 等操作時;

3、用戶通過鼠標進行粘貼、剪切、撤消等操作時;

 

<body>
<input id="text1" type="text"/>
<div id="info1"></div>
<script type="text/javascript">
    var text1 = $("#text1");
  //input基本滿足,但不能完全支持IE text1.bind(
"input", function () { console.clear(); console.log("input", $(this).val()); });
  //有input就夠了,propertychange好像沒什么效果 text1.bind(
"propertychange", function () { console.clear(); console.log("propertychange",$(this).val()); });
  //只能捕獲鍵盤事件
 text1.bind("keyup", function () {

      console.clear();
      console.log("keypress", $(this).val());
    });

</script>
</body>

 

現在針對<input>文本框的onchange相關的事件,主要有以下幾個事件,分析他們對以上情況是否能捕獲

onchange:文本框好像沒有該事件,只有下拉框才有。

不足:不支持文本框

oninput:文本框值改變時觸發,以上三種情況都滿足。

不足:但是在IE9及以下時,只有捕獲輸入可見字符,但在文本框中進行delete Backspace ctrl+x等操作時無法進行捕獲;

onpropertychange:

onkeypress:在文本框中按下鍵盤的事件,細分可分為onkeydown和onkeyup事件。

不足:這個好像是否捕獲用戶輸入的事件,但用戶如果通過鼠標右擊粘貼,則無法捕獲。

 

以下是針對IE不能正常捕獲change事件,作出的監聽方法。

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>test</title>  
    <script src="../js/jquery-1.7.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        //文本框change事件。
        //兼容IE9 chrome、firefox
        //解決IE9下 按delete、Backspace、ctrl+x 改變文本內容時不能觸發change事件
        function test() {
            $("#li1").select().focus();
        }
        //輸出值
        function check(p_obj) {
            console.log($(p_obj).val());
        }
        $(function () {
            if ($.browser.msie) {
                var flag = true;
                $("#text1").keydown(function (event) {
                    if ($(this).val() == "") {
                        flag = false;
                    } else {
                        flag = true;
                    }
                });
                $("#text1").keyup(function (event) {
                    var keycode = event.which;
                    //解決IE兼容 監聽ctrl+x ctrl+y ctrl+z 事件對文本值的改變 強制check
                    if (event.ctrlKey && (keycode == 88 || keycode == 89 || keycode == 90)) {
                        check($(this)[0]);
                        return;
                    }
                    //解決IE兼容 臨聽 delete backspace對文本框刪除操作 強制check
                    if ((keycode == 8 || keycode == 46 || keycode == 46) && flag) {
                        check($(this)[0]);
                    }
                });
                //禁用文本框的右鍵,防止用戶通鼠標右擊菜單進行粘貼、剪切操作
                $("#text1").bind("contextmenu", function (e) {
                    return false;
                });
            }
        });
    </script>
</head>
<body>
<input id="text1"   oninput="check(this)"/>  
</body>
</html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM