JQuery - 用于检测文本输入更改的跨浏览器解决方案,包括复制和粘贴到字段中?

时间:2012-09-13 10:44:24

标签: jquery internet-explorer javascript-events cross-browser

我开始使用$('#myInput').bind('input', function() {,但这在IE中不起作用。

检测文本输入字段的任何更改的最佳跨浏览器解决方案是什么,包括用户是否复制并粘贴到字段中?

1 个答案:

答案 0 :(得分:0)

Intevals。

他们很难看。不必要。几乎每个人都讨厌。但是在IE上测试用户输入的少数几个也是迄今为止最具弹性的方法之一。

<强>理由:

    IE&lt; 9中不支持
  • .on('input', function(){}),并且在IE9-10中有错误 - 删除字符时不会触发。
  • keyup远非完美,您可以从右键菜单和工具栏粘贴。
  • 据我所知,自IE6以来paste事件得到了很好的支持,但键盘输入和粘贴并不是输入值的唯一方法。您也可以在输入中选择,拖放文本。这是实现IE支持时首选间隔的原因之一。

在IE中,您还可以使用onpropertychange作为后备,但只要对象属性发生更改,它就会触发,从而强制您像使用Interval一样执行类似的“值更改”验证。因此,我宁愿编写一个在所有浏览器中都有效的间隔,而不是为所有浏览器编写代码,而为IE编写另一个代码。

所以我建议的解决方案是:

  1. 使用如下间隔:

    $(function() {
        var input = $('#foo'); //change this selector to your input
        function checkchange() {
            var v = input.val();
            if (input.data('v') === v) return;
            input.data('v', v);
            //do stuff
        }
        input.data('v', input.val());
        setInterval(checkchange, 100);
    });
    
  2. Fiddle

    或2.将GCF放在模态上并隐藏X按钮,因此强制IE用户安装它,您将永远不必再次编写IE特定的代码 - 我随时都可以这样做!然后,我的目标受众通常不包括IE用户。