zoukankan      html  css  js  c++  java
  • 文本框的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>
  • 相关阅读:
    Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test (default-test)
    maven打包报错:Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.5:test
    关于log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).的问题
    maven-source 1.3 中不支持注释请使用 -source 5 或更高版本以启用注释
    <Android基础>(二) Activity Part 1
    <Android基础>(一)
    数制
    第二次实验报告:使用Packet Tracer分析应用层协议
    在Windows Server 2003中搭建DNS服务器
    第一次作业:使用Packet Tracer分析HTTP包
  • 原文地址:https://www.cnblogs.com/web369/p/4170271.html
Copyright © 2011-2022 走看看