5

JQuery マスク入力プラグインを使用しています。

$("#percent").mask("99.99?9");

これにより、次のような数値が可能になります10.999, 10.99, 01.999, 01.99

私が達成したいのは、ユーザーに入力させたくないということです01.99。代わりに、以前に1.99必要なユーザータイプが自動的に追加される場合。これは私が始めた方法ですが、続行する方法がわかりません:01

  //assume i typed in field 11.99
  $(document).on('keyup', '#percent', function(evt) {
    var input = $(this).val();
    alert(input); // 11.99_
    if(evt.which == '190' || evt.which == '110') {
       //if dot is clicked 
       alert(parseInt(input)); // 11
    }
});

3 番目の値はオプションであり、入力しなかったため、アラートの入力11.99_は最後にアンダースコアが表示されることに注意してください。

現在、この値は完全に正常ですが、ユーザーが を入力1.99すると、自動的に移動9して数字で1埋められるため、 が返され、上で定義したように小数が存在する必要があるため、これは無効です。したがって、私の if ステートメントでは、入力されたものが より小さいかどうかを検出できるようにしたいと考えています。小数点以下の場合は、最初に追加します。219.9210100

OK の修正を見つけましたunderscore _:

    $("#percent").mask("99.99?9", {placeholder: ""})

1.99しかし、まだ入力に関する他の問題は修正されていません19.9

4

1 に答える 1

0

これを行うためにキーダウンをインターセプトできますが、プラグインの状態を更新する何らかの方法が必要になります。

次のコードは機能します。

$("#percent").bind({
    keydown: function(e) {
        // custom handler for dot
        var userInput = parseFloat($("#percent").val());
        if(e.which == '190' || e.which == '110') {
            // if entered number is integer and less than 10
            if(userInput % 1 === 0 && userInput < 10) {
                // prevent default mask input handlers from calling
                e.preventDefault();
                e.stopImmediatePropagation();

                // update value
                $("#percent").val('0'+userInput+'.');

                // simulate paste event to refresh mask input plugin state
                $("#percent").trigger('paste').trigger('input');
            }
        }       
    }
}).mask("99.99?9", {placeholder: ""});

JSFiddle の作業はこちら

于 2012-11-18T08:19:30.100 に答える