4

在我正在进行的一个项目中,我有一个文本框,用户必须在其中输入他的名字。为了避免用户输入数字,我使用了 Brian Jaeger编写的jquery.limitkeypress.js库,在我在 Internet Explorer 10 中测试该网站之前,一切都运行良好。在 IE10 中,你可以输入所有你想要的字母,然后你无法按我的意愿输入数字或奇怪的符号,但是当我输入一个空格然后输入一个字母时,我看到字母打印到空格,然后空格消失,后者向左移动。奇怪的是,如果我在输入空格后等待 30 秒来输入字母,它就可以正常工作。

4

2 回答 2

4

jquery.limitkeypress.js 与 ie 有一些问题,我建议你使用更强大的库。

http://github.com/RobinHerbots/jquery.inputmask

有了这个库,你可以使用这样的东西:

$(".numbers").inputmask('Regex', {
    mask: "9",
    repeat: 11,
    placeholder: ""
});

它在 ie 上完美运行。:)

于 2013-07-18T17:49:47.217 回答
1

对不起,我已经几年没有更新那个插件了,但是......

jquery.limitkeypress现在可与 IE9+ 一起使用,但选择的确定方式存在问题。

IE11 终止了对他们的 document.selection 的支持,但他们保留了我用来测试正在使用的浏览器的 document.setSelectionRange...

IE9 启用了 document.selectionStart 和 document.selectionEnd 所以我现在直接检查 IE 用户正在使用的浏览器版本...

我添加了这个来检查 IE 版本:

var ie = (function(){
var undef,
  v = 3,
  div = document.createElement('div'),
  all = div.getElementsByTagName('i');
while (
  div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
  all[0]
);
return v > 4 ? v : undef;
}());

所以我的选择功能现在看起来像这样:

function getSelectionStart(o) {
  if (ie < 9) {
    var r = document.selection.createRange().duplicate()
    r.moveEnd('character', o.value.length)
    if (r.text == '') return o.value.length
      return o.value.lastIndexOf(r.text)
    } else return o.selectionStart
  }
function getSelectionEnd(o) {
  if (ie < 9) {
    var r = document.selection.createRange().duplicate()
    r.moveStart('character', -o.value.length)
    return r.text.length
  } else return o.selectionEnd
}
于 2016-03-03T22:18:17.473 回答