2013-05-10 147 views
4

在我正在开发的一个项目中,我有一个用户必须输入姓名的文本框。为了避免用户输入数字,我使用Brian Jaeger编写的jquery.limitkeypress.js库,并且在IE 10中测试网站之前,每件事情都很完美。在IE10中,您可以输入所需的所有字母,并且不能输入数字或奇怪的符号就像我想要的一样,但是当我输入一个空格然后输入一个字母时,我看到字母正好印在空格上,然后空格消失,后者向左移动。奇怪的是,如果我在输入空格键入字母后等待30秒,它可以正常工作。我遇到了limitkeypress.js和IE10的问题

回答

5

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

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

有了这个库,你可以使用这样的事情:

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

它完美的IE浏览器。 :)

+1

非常感谢,它工作得很好 – 2013-07-18 17:52:08

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 
} 
+0

虽然这个链接可能回答这个问题,但最好在这里包含答案的基本部分并提供参考链接。如果链接页面更改,则仅链接答案可能会失效。 - [来自评论](/ review/low-quality-posts/11499102) – Magisch 2016-03-04 08:13:16

+0

-更新的答案 – Jaeger 2016-03-04 16:50:47