我看到了这个问题,但没有一个解决方案支持最小值和最大值范围
如何使用 jQuery 在 HTML 输入框中只允许数字(0-9)?
我看到http://jstepper.emkay.dk/试图这样做,但似乎非常错误,因为它允许您输入多个小数位和其他字符,例如“;”。
有没有我可以使用其中一种解决方案的方法,并且还说,在文本框条目中仅支持 0 的最小值和 100 的最大值?
我看到了这个问题,但没有一个解决方案支持最小值和最大值范围
如何使用 jQuery 在 HTML 输入框中只允许数字(0-9)?
我看到http://jstepper.emkay.dk/试图这样做,但似乎非常错误,因为它允许您输入多个小数位和其他字符,例如“;”。
有没有我可以使用其中一种解决方案的方法,并且还说,在文本框条目中仅支持 0 的最小值和 100 的最大值?
我是jStepper的作者,我刚刚更新了插件以便能够做你喜欢的事情。
所以再试一次,看看它现在是否有效:)
添加此类字段的 HTML5 方式。适用于 Chrome 和 Safari:
<input type="range" min="0" max="100" step="1" />
一个完整的例子:
<input id="picker" type="range" min="0" max="100" step="1" onchange="$('#pickerValue').text(this.value)" />
<div id="pickerValue"></div>
创建只接受范围的自定义类型的文本框。像这样的东西应该工作:
function RangeTextBox(min, max) {
this.min = min;
this.max = max;
this.textBox = $("<input type='text'>");
// Disallow non-numbers from being typed in box
this.textBox.keydown(function(event) {
var isNotBackspaceOrDelete = event.keyCode != 46 && event.keyCode != 8;
var isNotInteger = event.keyCode < 48 || event.keyCode > 57;
if(isNotBackspaceOrDelete && isNotInteger) {
event.preventDefault();
}
});
// Check for a valid range
this.textBox.keyup(function(event) {
var textBox = event.target;
var isNotInRange = (textBox.value < min) || (textBox.value > max);
if (isNotInRange) {
textBox.value = textBox.value.slice(0, -1);
}
});
return this.textBox;
}
要使用它,只需调用new RangeTextBox(min, max)
. 例如
$(document).ready(function() {
$("body").append(new RangeTextBox(1, 18));
});
免责声明:如果最小值为 6 为 2 < 6,则这与 Harmen 在字段的另一个答案中列出的相同问题不接受数字“26”的值如 2。您可以使用计时器,或者实际移动这个检查keyup
andkeydown
事件之外,并检查onblur
oronchange
代替。这将允许无效数据进入该字段,但它不那么烦人。
编辑:此解决方案可让您输入任何内容,但会标记所有无效输入,包括超出范围。
function RangeTextBox(min, max) {
this.min = min;
this.max = max;
this.textBox = $("<input type='text'>");
// Check for a valid range
this.textBox.keyup(function(event) {
var textBox = event.target;
var value = parseInt(textBox.value);
var isNotNumeric = !/^[0-9]+$/.test(textBox.value);
var isOutsideRange = (value < min) || (value > max);
if (isNotNumeric || isOutsideRange) {
$(textBox).addClass('error');
}
else {
$(textBox).removeClass('error');
}
});
return this.textBox;
}
和样式表:
<style type="text/css">
.error {
color: red;
}
例如,这是一种使用 jQuery 的方法,“仅支持文本框条目中的最小值为 0 和最大值为 100”。它的工作原理是将您的输入恢复到以前的状态 - 如果您输入的键导致值小于 MIN 或大于 MAX。您可以设置一个标志以仅接受整数。
HTML 标记如下所示: ( JSFIDDLE )
<input type="text" class="maxmin" min="0" max="100" intOnly="true" />
然后,您将在文档就绪代码中运行此 JavaScript:
// Run this on document ready to allow only numbers between
// max and min to be entered into textboxes with class="maxmin".
// Attributes max, min, and intOnly="true/false" are set in the tag.
// Min should probably be "0" or "1", or max and min could be single digits.
// Otherwise for example, if min=5, you couldn't enter 23 because 2 < 5.
$(".maxmin").each(function () {
var thisJ = $(this);
var max = thisJ.attr("max") * 1;
var min = thisJ.attr("min") * 1;
var intOnly = String(thisJ.attr("intOnly")).toLowerCase() == "true";
var test = function (str) {
return str == "" || /* (!intOnly && str == ".") || */
($.isNumeric(str) && str * 1 <= max && str * 1 >= min &&
(!intOnly || str.indexOf(".") == -1) && str.match(/^0\d/) == null);
// commented out code would allow entries like ".7"
};
thisJ.keydown(function () {
var str = thisJ.val();
if (test(str)) thisJ.data("dwnval", str);
});
thisJ.keyup(function () {
var str = thisJ.val();
if (!test(str)) thisJ.val(thisJ.data("dwnval"));
})
});
我是新手,所以任何建设性的意见将不胜感激。
以下是您的脚本的示例:
var value, min=6, max=100;
function isNumberPressed(k) {
// 48-57 are number 0-9 on a normal keyboard, 96-105 are keypad numbers
return (k > 47 && k < 58) || (k > 95 && k < 106) ? true : false;
}
function isValidNumber(v){
// Check if a valid number is entered
return (parseInt(v, 10) >= min && parseInt(v, 10) <= max) ? true : false;
}
$(document).ready(function() {
$("#test").keydown(function(e) {
// See if a valid key is pressed
if(isNumberPressed(e.keyCode)){
if(isValidNumber($(this).val())) value = $(this).val();
}
// Do nothing if unallowed keys are pressed
else if(e.keyCode != 46 && e.keyCode != 8) return false;
}).keyup(function(){
// If the value, including the latest number that's added, is not valid (to high or to low), show the old value again
if(isValidNumber($(this).val()) == false){
$(this).val(value);
}
});
});
但它有一个很大的缺点,如果最小值为 6,则不能输入 26,因为 2 < 6。如果最小值小于或等于 10,则这不是问题。
但是,如果您的最小值超过 10,则可以考虑以下代码:
var timer, min=36, max=100;
function isValidNumber(v){
// Check if a valid number is entered
return (parseInt(v, 10) >= min && parseInt(v, 10) <= max) ? true : false;
}
$(document).ready(function() {
$("#test").keydown(function(e) {
that = this;
// Clear the timer
if(timer)
clearTimeout(timer);
// Set a new timer with a delay of one second
timer = setTimeout(function(){
if(isValidNumber($(that).val()) == false) $(that).addClass('error');
else $(that).removeClass('error');
}, 1000);
});
});
它以一秒的延迟检查输入。为此,您需要一些 CSS 代码,例如:
input.error {
border: 2px solid red;
}
两个脚本都即时检查值,这是一个很好的方法。
我创建了一个支持 min、max 和 step的 jQuery SpinControl 。它首先检查浏览器 (Opera) 是否已经支持 SpinControl,然后再添加自定义的。
JStepper 有一个错误,我在他们的站点上尝试了测试器。 http://jstepper.emkay.dk/Default.aspx
苹果规则,但我可以输入文本:8778.09999
我搜索,最后我明白输入的值必须在三个事件中检查。keydown、keypress 和 keyup,它们中的任何一个都有自己的责任。keypress:检查按下的键并确定输入的字符。然后,如果它是数字,则让它阻止该操作。如您所见,我尝试在这里检查范围
//var final = val + String.fromCharCode(charCode);
//alert(final);
//if (final < min || final > max)
// return false;
但在此之前我们只是有新的性格和价值。因此,如果我们尝试检查它们的总和,那是错误的方式,因为也许用户选择了值的一部分,而新角色则相反。假设最大范围是 100,我们在 Input 中有“345”,用户选择了“34”,现在用户按“2”,结果必须是“25”,但是“345”+“2”的总和是 347,并且功能阻止了这种情况. 所以我决定使用 keyup 事件来检查范围和正确的值。最后,当浏览器支持 HTML5 数字类型的输入时,keydown 用于检查向上和向下箭头和控制值,而不会像按键一样改变,所以你不能使用它。
我写了一个简单的脚本,希望有所帮助。您可以在http://jsfiddle.net/QMaster/r4hwr3a6/中看到它