10

jqueryライブラリでfloat数値のみを許可する入力を行うときに苦労します。私のコードは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();
   }
});​
4

7 に答える 7

8

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">

于 2012-04-14T04:46:43.937 に答える
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 イベントを使用して、ユーザーが浮動小数点以外の番号を入力できないようにすることができます。

于 2012-04-14T04:31:49.663 に答える
1

onkeypressイベントで呼び出される次のメソッドを使用できます。以下は、JS メソッドが続く HTML スニペットです。

input type="text" onkeypress ="return isNumberKey(event)" id="床"

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;
}

: 上記のコードでは、入力に 10 進数のみを入力することも保証されます。

于 2016-09-26T05:57:58.663 に答える
1

使わない理由Regular Expression

^[0-9]*[.][0-9]+$

ここでコードを読んでテストしてください..

于 2012-04-14T04:09:10.433 に答える