在输入时只有允许使用jquery库的浮点数时,我有痛苦的时间。我的代码无法阻止chacacter“。”当它成为第一个输入时,任何人都可以指导我解决这个问题吗?
$('.filterme').keypress(function(eve) {
if ( ( eve.which != 46 || $(this).val().indexOf('.') != -1 )
&& ( eve.which < 48 || eve.which > 57 )
|| ( $(this).val().indexOf('.') == 0)
)
{
eve.preventDefault();
}
});
答案 0 :(得分:20)
我用它 - 用于键盘输入或复制和粘贴
$('input.float').on('input', function() {
this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<input type="text" class="float" />
&#13;
说明:
答案 1 :(得分:7)
我使用jQuery Caret插件过滤第一个位置输入。否则,一旦输入了点,检查它的位置已经很晚了。我试着检查点,然后删除点,但看起来不太好。
jQuery插入符号插件: http://examplet.buss.hk/js/jquery.caret.min.js
我做了什么:
http://jsfiddle.net/FCWrE/422/
尝试一下:)
$('.filterme').keypress(function(eve) {
if ((eve.which != 46 || $(this).val().indexOf('.') != -1) && (eve.which < 48 || eve.which > 57) || (eve.which == 46 && $(this).caret().start == 0)) {
eve.preventDefault();
}
// this part is when left part of number is deleted and leaves a . in the leftmost position. For example, 33.25, then 33 is deleted
$('.filterme').keyup(function(eve) {
if ($(this).val().indexOf('.') == 0) {
$(this).val($(this).val().substring(1));
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/caret/1.0.0/jquery.caret.min.js"></script>
<input type="text" class="filterme">
答案 2 :(得分:3)
正则表达也是我的建议。如果值作为数字而不是字符串传递,则可以使用.toString将其更改为字符串并使用正则表达式对其进行验证。例如:
var str = value.toString();
if(!str.match(/^-?[0-9]*[.][0-9]+$/)) {
alert("Value must be a float number");
return;
}
return value;
如果传递的值是浮点数,则上述正则表达式将匹配。它接受负数和正数。如果你只想接受正数,只需删除' - ?'从表达。如果值只是零'0'而没有任何小数点,它也将失败。如果你想接受零,只需将它作为条件添加到'if'语句。
您可以使用上述验证和onchange事件来阻止用户输入非flot号码。
答案 3 :(得分:1)
答案 4 :(得分:1)
您可以使用以下方法,在 onkeypress 事件上调用。下面是JS方法后跟的HTML代码段:
输入类型=&#34;文字&#34; onkeypress =&#34;返回isNumberKey(事件)&#34; ID =&#34;地板&#34;
function isNumberKey(evt){
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode == 46){
var inputValue = $("#floor").val();
var count = (inputValue.match(/'.'/g) || []).length;
if(count<1){
if (inputValue.indexOf('.') < 1){
return true;
}
return false;
}else{
return false;
}
}
if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57)){
return false;
}
return true;
}
注意:上述代码也确保您只在输入中输入单个小数。
答案 5 :(得分:0)
这是我的解决方案,也使用负数(fiddle)
$("input").keypress(function (event) {
var inputCode = event.which;
var currentValue = $(this).val();
if (inputCode > 0 && (inputCode < 48 || inputCode > 57)) {
if (inputCode == 46) {
if (getCursorPosition(this) == 0 && currentValue.charAt(0) == '-') return false;
if (currentValue.match(/[.]/)) return false;
}
else if (inputCode == 45) {
if (currentValue.charAt(0) == '-') return false;
if (getCursorPosition(this) != 0) return false;
}
else if (inputCode == 8) return true;
else return false;
}
else if (inputCode > 0 && (inputCode >= 48 && inputCode <= 57)) {
if (currentValue.charAt(0) == '-' && getCursorPosition(this) == 0) return false;
}
});
function getCursorPosition(element) {
if (element.selectionStart) return element.selectionStart;
else if (document.selection)
{
element.focus();
var r = document.selection.createRange();
if (r == null) return 0;
var re = element.createTextRange(),
rc = re.duplicate();
re.moveToBookmark(r.getBookmark());
rc.setEndPoint('EndToStart', re);
return rc.text.length;
}
return 0;
}
答案 6 :(得分:0)
这对我有用:
var str = document.getElementById('product_'+id_product).value;
if( !str.match(/^[0-9]*([.,][0-9]+)?$/) ) {
console.log("Value must be a number or float number");
}else{
console.log("The number is valid");
}
我希望这可以帮助某人。 问候!