我如何才允许用户使用onkeyup
在文本框中输入“ - ”和1-9?
答案 0 :(得分:7)
更新:我使用jQuery看到了其他答案,并假设你有jQuery。请阅读下面的注释,然后参阅下面的非jQuery版本。
此外,我的示例使用了\d
,它也允许0
(您的问题明确指出1-9
)。如果您确实要限制1-9
,请将\d
与1-9
交换。
您可以在keyup
上删除无效字符。
$('textarea').keyup(function() {
$(this).val(function(index, oldVal) {
return oldVal.replace(/[^\d-]/g, '');
});
});
您可能还想绑定其他事件,例如paste
。
如果暂时显示的角色让你烦恼,你可以使用它......
$('textarea').keypress(function(event) {
var keyCode = event.keyCode;
if ( ! (keyCode >= 48 && keyCode <= 57) && keyCode != 45) {
event.preventDefault();
}
});
如果这太难阅读(使用键码),你可以这样做......
$('textarea').keypress(function(event) {
if ( ! String.fromCharCode(event.keyCode).match(/[\d-]/)) {
event.preventDefault();
}
});
此外,当浏览器最终符合规范时,您可以将pattern
attribute与[\d-]+
一起使用。这只会允许0-9
和-
。
var textareas = document.getElementsByTagName('textarea');
for (var i = 0, textareasLength = textareas.length; i < textareasLength; i++) {
var textarea = textareas[i];
textarea.onkeyup = function() {
textarea.value = textarea.value.replace(/[^\d-]/g, '');
}
}
var textareas = document.getElementsByTagName('textarea');
for (var i = 0, textareasLength = textareas.length; i < textareasLength; i++) {
var textarea = textareas[i];
textarea.onkeypress = function(event) {
var keyCode = event.keyCode || event.which;
if (!(keyCode >= 48 && keyCode <= 57) && keyCode != 45) {
event.preventDefault();
}
}
}
var textareas = document.getElementsByTagName('textarea');
for (var i = 0, textareasLength = textareas.length; i < textareasLength; i++) {
var textarea = textareas[i];
textarea.onkeypress = function(event) {
var keyCode = event.keyCode || event.which;
if (!String.fromCharCode(event.keyCode).match(/[\d-]/)) {
event.preventDefault();
}
}
}
答案 1 :(得分:1)
如果您使用的是jQuery:
var isAcceptableKey = /[0-9,-]*/;
$(yourinput).bind('keyup', function(e) {
if ( e.keyCode.match(isAcceptableKey) {
// ok
}
});
正如其中一条评论所指出的那样。只需使用正则表达式。我的正则表达式示例可能不完全正确。
答案 2 :(得分:1)
这是一个解决方案,它阻止所有非数字输入进入文本字段,不包括数字输入顶行和侧面键盘的' - '字符。
html
<input type="text" id="numbersOnly" />
javascript
var input = document.getElementById('numbersOnly');
input.onkeydown = function(e) {
var k = e.which;
if (!((k > 47 && k < 58) || (k > 95 && k < 106)) && !(k == 189 || k == 109 || k == 8 || k == 46)) {
e.preventDefault();
return false;
}
};
答案 3 :(得分:0)
答案 4 :(得分:0)
您的意思是只有正整数还是负整数?
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt
尝试类似:
if(isNaN(parseInt(textbox.value)))
{
//this is a validation error.
}
否则类似于:
var validationRegex = RegExp(/[-0-9]+/, "g");
if(!validationRegex.match(textbox.value)
{
//this is a validation error.
}
Disclamer:我还没有测试过这些。
将它们放入函数
function doKeyUpValidation(textbox)
{
}
和任何标记:
<input type="text" onkeyup="doKeyUpValidation(this)" />
或javascript:
textbox1.onkeyup = function (){...}
答案 5 :(得分:0)
你可以从发布的答案中找到很多方法。
我还有其他方法可以做到这一点。见下面的代码
<强> JS 强>
function isValidChar(char){
var txt = char;
var found = false;
var validChars = "-123456789"; //List of valid characters
for(j=0;j<txt.length;j++){ //Will look through the value of text
var c = txt.charAt(j);
found = false;
for(x=0;x<validChars.length;x++){
if(c==validChars.charAt(x)){
found=true;
break;
}
}
if(!found){
//If invalid character is found remove it and return the valid character(s).
document.getElementById('txtFld').value = char.substring(0, char.length -1);
break;
}
}
}
在你的HTML中:
<input type="text" id="txtFld" onKeyup="isValidChar(this.value);" />
实际上我的上司就是这样做的人。我的观点是通过使用它你可以玩代码并插入你可能需要的其他东西。例如,如果您不熟悉正则表达式,只需键入字符即可。好的缺点是,代码占用了很多空间,而不是使用另一个在这里做的jquery。