在OS X 10.10.1上的safari版本8.0(10600.1.25.1)中,如果您有以下内容:
<input type="text" maxlength="5" >
用5个字符填充,然后将插入符号(用鼠标或键盘)放在字符串中间的某个位置(不是在开头或结尾),键入将导致输入更多字符。
具体来说,在计算&#34;长度&#34;时,它会忽略插入符后面的字符。字符串,所以如果插入符最初放在位置1,则可以输入9个字符。
这在最新的chrome或firefoxes上无法重现。
此效果可在此页面上看到:http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_input_maxlength
我使用maxlength错了吗?这是一个众所周知的解决方法吗?我没有开心地搜索了一下......
答案 0 :(得分:7)
试试这个: HTML:
<input name="mytest" type="text">
Jquery:
$('input[name="mytest"]').keypress(function() {
if (this.value.length >= 5) {
return false;
}
});
答案 1 :(得分:0)
我遇到了类似的问题,经过大量的研究,大脑支持和来自这个网站的帮助,这就是我所做的。它阻止在Firefox中选择所有[CTRL + A],退格/删除错误。对我来说很好。也可能为别人工作。请原谅全球命名空间污染。
function getBrowserInfo() {
//function that returns an array with browser name at index 0, version at index 1
var N=navigator.appName, ua=navigator.userAgent, tem;
var M=ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);
if(M && (tem= ua.match(/version\/([\.\d]+)/i))!= null) {
M[2]= tem[1];
}
M = M ? [M[1], M[2]]: [N, navigator.appVersion, '-?'];
return M;
}
function crossBrowserify() {
//checks for browsers that lack support and adds the handler leaving compatible browsers like Firefox unaffected
var browserInfoArr = getBrowserInfo(),
browser = browserInfoArr[0],
browserVersion = browserInfoArr[1];
if(browser.toLowerCase() == "safari" && browserVersion >= 8 && browserVersion < 9) {
$(document).on("keypress", "input[type='text']", preventExcessCharacters);
}
}
function preventExcessCharacters(e) {
//fix for a bug in Mac OSX Safari 8
var $this = $(this), //caching element to prevent performance issues due to frequent DOM access
mxLength = $this.attr("maxlength");
if(mxLength){
if (e.which < 0x20) {
// e.which < 0x20, then it's not a printable character
// e.which === 0 - Not a character
return; // Do nothing
}
if (this.value.length == mxLength) {
e.preventDefault();
} else if (this.value.length > mxLength) {
// Maximum exceeded
// fix for copy paste bug
this.value = this.value.substring(0, mxLength);
}
}
}
//set handler if browser lacks support
crossBrowserify();