我开始使用$('#myInput').bind('input', function() {
,但这在 IE 中不起作用。
检测文本输入字段的任何更改(包括用户是否复制并粘贴到该字段)的最佳跨浏览器解决方案是什么?
我开始使用$('#myInput').bind('input', function() {
,但这在 IE 中不起作用。
检测文本输入字段的任何更改(包括用户是否复制并粘贴到该字段)的最佳跨浏览器解决方案是什么?
他们很难看。不必要。几乎所有人都讨厌。但这是为数不多且迄今为止最具弹性的在 IE 上测试用户输入的方法之一。
原因:
.on('input', function(){})
在 IE<9 中不受支持,并且在 IE9-10 中存在错误 - 删除字符时不会触发。keyup
远非完美,您可以从右键菜单和工具栏中粘贴。paste
事件得到了很好的支持,但是键盘输入和粘贴并不是输入值的唯一方法。您也可以在输入中选择、拖放文本。这是实现 IE 支持时首选间隔的原因之一。在 IE 中,您也可以将onpropertychange
其作为后备,但它会在对象属性更改时触发,从而迫使您像使用 Interval 一样执行类似的“值更改”验证。因此,我宁愿编写一个适用于所有浏览器的单个区间,也不愿为所有浏览器编写代码而为 IE 编写另一个代码。
所以我建议的解决方案是:
使用间隔如下:
$(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 用户。