我是javascript的新手。我有一个只接受数字的输入框。如果有人在该输入上进行复制粘贴,则应修剪所有非数字字符。输入字段最多只能包含10个字符。
这是代码。它适用于Chrome,但不适用于IE。有人能弄清楚出了什么问题吗?
<!DOCTYPE html>
<html>
<body>
<input type="text" maxlength="10" title="Number" pattern="[0-9]*" onkeypress='validate(event)' onpaste="strip(this, event)"/>
<p id="demo"></p>
<script>
function strip(obj, evt) {
var theEvent = evt || window.event;
obj.value = theEvent.clipboardData.getData('Text').replace(/\D/g, '');
obj.value = obj.value.substring(0,Math.min(10,obj.value.length));
theEvent.returnValue = false;
}
function validate(evt) {
var theEvent = evt || window.event;
var key = theEvent.keyCode || theEvent.which;
key = String.fromCharCode(key);
var regex = /[0-9]/;
if (!regex.test(key)) {
theEvent.returnValue = false;
if (theEvent.preventDefault) theEvent.preventDefault();
}
}
</script>
</body>
</html>
&#13;
Chrome版本 - 版本40.0.2214.115 m IE版本 - 9.0.8
答案 0 :(得分:1)
用以下作品替换你的条形函数:
function strip(input, evt) {
var clipboardData = window.clipboardData ? window.clipboardData : evt.clipboardData;
var theEvent = evt || window.event;
var text = clipboardData.getData('Text');
var processedText = text.replace(/\D/g, '').substring(0, Math.min(10, text.length));
input.value = processedText;
theEvent.returnValue = false;
if (theEvent.preventDefault) theEvent.preventDefault();
}
答案 1 :(得分:0)
您正在使用属性pattern,这是HTML5中的新属性,而不受版本10以下的IE支持。
答案 2 :(得分:0)
您可以使用带有类型编号的输入来防止插入除数字以外的字符。 但是这种输入类型相对较新,不适用于某些旧版浏览器。
小例子:
<form>This will allow anything.
<input type="text">
<br />This will allow only numbers.
<input type="number">
<br />Try typing in letters in the bottom box and pressing send.
<br />
<input type="submit">