文本框的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>
时间: 2024-10-11 06:43:35

文本框的onchange事件,如何兼容各大浏览器的相关文章

My97DatePicker日历的平面显示,不是文本框点击事件后显示

二. 功能及示例 2. 特色功能 平面显示 日期控件支持平面显示功能,只要设置一下eCont属性就可以把它当作日历来使用了,无需触发条件,直接显示在页面上 示例2-1 平面显示演示 <div id="div1"></div> <script> WdatePicker({eCont:'div1',onpicked:function(dp){alert('你选择的日期是:'+dp.cal.getDateStr())}}) </script>

JS来推断文本框内容改变事件

   oninput,onpropertychange,onchange的使用方法 onchange触发事件必须满足两个条件: a)当前对象属性改变,而且是由键盘或鼠标事件激发的(脚本触发无效) b)当前对象失去焦点(onblur):    onpropertychange的话,仅仅要当前对象属性发生改变,都会触发事件,可是它是IE专属的: oninput是onpropertychange的非IE浏览器版本号,支持firefox和opera等浏览器,但有一点不同,它绑定于对象时,并不是该对象全部

关于下拉框的onchange事件和onclick选择value值。

下拉框的onchange事件和onclick,一般最好都选择onchange事件,onclick可能会不兼容有些浏览器. 下面是代码: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>选择</title> <script src="js/lib/jquery/v1.12.3/jquery-1.

在GridView控件内文本框实现TextChanged事件

本篇是教你实现GridView控件内的TextBox文本框实现自身的TextChanged事件.由于某些功能的需求,GridView控件内嵌TextBox,当TextBox值发生变化时,触发TextChanged事件. 在.aspx网页内,Insus.NET尝试写一个GridView,算了,我们还想在Ajax环境之下运行: 为了实现TextChanged事件,得需要在GridView控件中写OnRowCreated事件,记住是OnRowCreated事件,而不是OnRowDataBound事件.

jQuery文本框中的事件应用

jQuery文本框中的事件应用 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>jquer

【js】js访问剪切板(兼容各大浏览器)唯一解决方案ZeroClipboard.swf

需求描述: 通过JS实现将页面中的某个元素的数据复制到剪切板上. 需求分析: 要用JS实现最大的问题就是浏览器的兼容性问题了.而且最大的问题还是浏览器出于安全型的考虑,所以像chrome,Firefox等浏览器都不让访问. 解决方案: 最终的解决方案还是通过flash实现的,在网上搜索(关键字:js access clipboard)了一大堆的相关资料,但是这或许是唯一的解决方案了吧!真没想到,flash还是最终的解决方法.当有一天flash彻底被浏览器给抛弃了我想这又将是一大问题了.但是这个问

☆☆☆☆☆Placeholder兼容各大浏览器的例子☆☆☆☆☆

<!doctype html> <html> <head> <meta charset="utf-8"> <title>Placeholder兼容各大浏览器的例子</title> <script src="jquery-1.8.0.min.js"></script> </head> <body> <form> <div> &

jQuery文本框(input textare)事件绑定方法教程

jquery 的事件绑定已经用on替换了原来的bind,接下来为大家分享下bind的使用方法及input textare事件.目前1.7以上,jquery?的事件绑定已经用on替换了原来的bind,接下来为大家介绍下bind的使用方法及input textare事件,感兴趣的朋友可以参考下 (1)jquery 绑定事件 目前1.7以上,jquery的事件绑定已经用on替换了原来的bind: 区别:(个人理解)bind是一次绑定事件到每一个子节点:on是只绑定到父节点,然后冒泡到各个子节点: 用法

文本框脚本 - select 事件

HTML中,用两种方式来表示文本框: input 单行文本.textarea 多行文本 那么在文本中存在哪些事件尼? 1    select 都支持 但是其触发的时机不一样 IE9+ .Safair .Opera.Chorme.Firefox 当用户选择文件时,鼠标松开时触发 IE8以及其下 当用户选择文本时,就会触发 1 window.onload = function() { 2 if (document.addEventListener) { 3 document.forms[0].ele