0

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

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

4

1 回答 1

0

间隔。

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

原因:

  • .on('input', function(){})在 IE<9 中不受支持,并且在 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. 将GCF放在模式上并隐藏 X 按钮,从而强制 IE 用户安装它,您将永远不必再次编写特定于 IE 的代码 - 我会尽可能地这样做!再说一次,我的目标受众通常不包括 IE 用户。

于 2012-09-13T11:07:34.700 回答