zoukankan      html  css  js  c++  java
  • js监听文本框变化事件

    用js有两种写法:

    法一:

    <!DOCTYPE HTMl>
    <html> 
    <head> 
    <title> new document </title> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head> 
    <body> 
    <div id="msg"></div> 
    <input id='txt' value="" /> 
    <input id='btn' value="点我" type="button" onclick="ff()" /> 
    <script> 
    //当状态改变的时候执行的函数 
    function handle() { 
        document.getElementById('msg').innerHTML = "输入的文字为:" + document.getElementById('txt').value; 
    } 
    if(/msie/i.test(navigator.userAgent)) {   //ie浏览器
        console.log("ie浏览器")
        //document.getElementById('txt').onpropertychange = handle; 
        document.getElementById('txt').attachEvent("onpropertychange", handle); 
    } 
    else {//非ie浏览器,比如Firefox 
        console.log("非ie浏览器")
        document.getElementById('txt').addEventListener("input", handle, false); 
        //document.getElementById('txt').watch('a', fn); 
    } 
    function ff() { 
        document.getElementById('txt').value=Math.random(); 
    } 
    </script> 
    </body> 
    </html>

    法一的缺点显而易见,需要判断浏览器的版本,貌似ie11之后是支持

    addEventListener,但是,ie11却不能通过
    /msie/i.test(navigator.userAgent)去判断,原因是因为userAgent中不包括msie字符串了。
    附个版本浏览器的userAgent:

    ie11:Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; rv:11.0) like Gecko
    ie10:Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)
    ie9:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
    ie8:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)
    ie7:Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)
    ie6:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)

    chrome:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36
    firefox:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0

    法二:

    法二是对法一思想上的升级,不需要通过检测浏览器,而是检测Web 浏览器所支持功能的方法存在,即直接检测对功能的支持:

    <!DOCTYPE HTMl>
    <html> 
    <head> 
    <title> new document </title> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head> 
    <body> 
    <div id="msg"></div> 
    <input id='txt' value="" /> 
    <input id='btn' value="点我" type="button" onclick="ff()" /> 
    <script> 
    //当状态改变的时候执行的函数 
    
    function handle() { 
        document.getElementById('msg').innerHTML = "输入的文字为:" + document.getElementById('txt').value; 
    } 
    
    function registerEvent(sTargetID, sEventName, fnHandler) {
        var oTarget = document.getElementById(sTargetID);
        if (oTarget != null) {
            if (oTarget.addEventListener) {
                oTarget.addEventListener(sEventName, fnHandler, false);
            } else {
                var sOnEvent = "on" + sEventName;
                if (oTarget.attachEvent) {
                    oTarget.attachEvent(sOnEvent, fnHandler);
                }
            }
        }
    }
    registerEvent('txt',"input",handle);
    </script> 
    </body> 
    </html>

    法二可以用在很多浏览器兼容的事件添加上,但是有个问题,比如input是html5新增加的事件,对于一些不支持html5的老ie版本,可能会有问题

    法三:

    使用jquery实现

    使用 jQuery 库的话,只需要同时绑定 oninput 和 onpropertychange 两个事件就可以了,示例代码如下:

    $('textarea').bind('input propertychange', function() {
        $('.msg').html($(this).val().length + ' characters');
    });
  • 相关阅读:
    [Debug] A strange error encountered today in ROS
    实操 | 安装一台3D打印机
    实操 | Getting started with Baxter Research Robot ...
    学习笔记 | What is Monocular Vision?
    路线图 | Roadmap of SLAM Research
    路线图 | Road-map of Cracking the Coding Interview as a C++ Developer
    实操 | Implementing Cartographer ROS on TurtleBots
    实操 | Implementing Google's Open Source Slam "Cartographer" demos in ROS / rviz
    科技新闻 | Google's Open Source SLAM Library ---- Cartographer
    实操 | Implementing "slam_karto" package on a Freight robot
  • 原文地址:https://www.cnblogs.com/winkey4986/p/4754710.html
Copyright © 2011-2022 走看看