我使用此代码并且可以正常使用
<HTML>
<HEAD>
<SCRIPT language=Javascript>
<!--
function isNumberKey(evt)
{
var charCode = (evt.which) ? evt.which : event.keyCode;
if (charCode != 46 && charCode > 31
&& (charCode < 48 || charCode > 57))
return false;
return true;
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<INPUT id="txtChar" onkeypress="return isNumberKey(event)"
type="text" name="txtChar">
</BODY>
</HTML>
但我无法访问html,只有javascript
document.getElementById("txtChar").addEventListener("keypress", <<your code>>, false);
应该采取什么措施<<your code>>
?
P.S。发现了这个组件的另一个错误:
当你复制粘贴(ctrl-v或右键单击粘贴)时,它不起作用
有人可以知道如何解决它
答案 0 :(得分:4)
如果您使用HTML5
并且只定位现代浏览器,那么新属性required
和pattern
就在您身边。例如:
<input id="txtChar" type="number" required pattern="\d+"/>
你可以通过 CSS 来解决状态,如
#txtChar:required:valid {
border: 1px solid green;
}
#txtChar:required:invalid {
border: 1px solid red;
}
如果在<form>
代码中使用,则用户将无法以无效的状态提交。
我刚看到你无法访问标记,所以道歉。我将把它留作信息性答案。
答案 1 :(得分:1)
在<<your code>>
中添加要处理它的函数的名称,在这种情况下为isNumberKey
;您还需要在evt.preventDefault();
return false;
以下此功能仅接受与0到9的数字对应的代码,并忽略点(“。”),连字符(“ - ”)和减号(“ - ”)。
function isNumberKey(evt){
var charCode = (evt.which) ? evt.which : evt.keyCode;
if (charCode == 46 || charCode > 31 && (charCode < 48 || charCode > 57)){
evt.preventDefault();
return false;
}
return true;
}
配置HTML5浏览器的输入字段:
txtChar = document.getElementById("txtChar")
txtChar.addEventListener("keypress", isNumberKey, false);
//Attributes
txtChar.type = "number";
txtChar.min = 0;
txtChar.pattern = "\\d+";
txtChar.placeholder = "Only integer positive numbers";
txtChar.required = "required";
工作示例包括来自jAndy答案的样式:http://jsfiddle.net/pL9Zk/
答案 2 :(得分:0)
事件在函数内是未知的。所以提到要运行的事件对象:
<击> document.getElementById(“myElement”)。addEventListener(“keypress”,function( event ){ return isNumberKey(event); },false); 击>
编辑:
问题有所改变,所以引用答案:
1.将“myElement”更改为“txtChar”
2.将事件对象包含为参数
document.getElementById("txtChar").addEventListener("keypress", function(event){
return isNumberKey(event);
}, false);
答案 3 :(得分:0)
这是一个错误?
document.getElementById(**"txtChar"**).addEventListener("keypress", function(){
return isNumberKey(event);
}, false);
答案 4 :(得分:0)
试试这段代码。我希望它能帮助你很多我使用jQUERY。
<head>
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<input id="txtChar" type="text" name="txtChar">
</body>
<script>
$("#txtChar").keypress(function(e) {
var charCode = (e.which) ? e.which : event.keyCode;
if (charCode != 46 && charCode > 31
&& (charCode < 48 || charCode > 57))
return false;
return true;
});
</script>
答案 5 :(得分:0)
如果您不能使用HTML5 <input type="number">
,那么我将使用仅允许数字的输入值进行正则表达式。我修改了我写的脚本来完成类似的任务。它允许粘贴和剥离任何非整数字符。
var arrowKeys = [37, 38, 39, 40];
function stripChars( e ) {
// Don't execute anything if the user is just moving the cursor around and
// not really entering anything new.
if(arrowKeys.indexOf(e.keyCode) !== -1){ return; }
var elem = e.currentTarget,
cursorPos = elem.selectionEnd;
// strip any unwanted character and assign the value back
elem.value = elem.value.replace(/\D/g,'');
// this avoids the cursor shifting to the end of the input
// when inserting an integer in the middle of an already existing number
elem.selectionEnd = cursorPos;
elem.focus();
}
var elem = document.getElementById('elem');
elem.addEventListener('keyup', stripChars, false);
elem.addEventListener('paste', stripChars, false);
答案 6 :(得分:0)
我知道我参加派对有点晚了。
jAndy的HTML5示例可能是支持它的浏览器的最佳答案。 Josaph的JavaScript答案很好,因为它激发了我解决提问者的补遗和问题的答案。
以下抛出与正则表达式匹配的输入(不是数字,用空字符串替换),并且在输入时随时调用,即使是粘贴也是如此。
function stripNonNumeric() {
this.value = this.value.replace(/\D+/g, '');
}
var txtChar = document.getElementById("txtChar");
if (txtChar.addEventListener) {
txtChar.addEventListener("input", stripNonNumeric);
} else if (txtChar.attachEvent) {
txtChar.attachEvent("oninput", stripNonNumeric);
}
我不是一个JavaScript人,我不确定这是解决问题的好方法,还是需要考虑性能问题。但是,它对我有用。