1

小数点以下の検証に次の関数を使用しますが、IE と Chrome では正常に動作しましたが、Fire Fox では動作しませんでした。このコードを fire fox で実行すると、文字を入力できません。

   $('.decimalValidate').live('keypress', function (event) {
       var decimalval= $(this).val();
       if ((event.which > 47 && event.which < 58)) {
           return true;
       }
       if ((event.which == 8 || event.which == 46) && decimalval.indexOf('.') == -1)  {
           return true;
       }
       return false;                          
   });

この条件は FF では機能しません

if ((event.which == 8 || event.which == 46) && decimalval.indexOf('.') == -1)  {
    return true;
}
4

1 に答える 1

2

は推奨され.on()ていないため、jQuery 1.7.x でこのデリゲート イベント ハンドラーを試すことができます。live()

.on()デリゲート イベントの構文は次のとおりです。

$(container).on(eventNaem, target, eventHandler)

ここでは、動的に DOM に表示されないものをcontainer指します。Static-element

$(document).on('keypress', '.decimalValidate', function(event) {

     // var decimalid = $(this).attr("id"); // I think you don't need this

    var decimalval = $(this).val(); // or this.value

    if ((event.which > 47 && event.which < 58)) {
        return true;
    }
    if ((event.which == 8 || event.which == 46) && decimalval.indexOf('.') == -1) {
        return true;
    }
    return false;
});

コメントによると

  • backspace動かない

次の条件で処理しbackspaceています:delete

(event.which == 8 || event.which == 46) && decimalval.indexOf('.') == -1

そのような検証を設定します:

テキストボックスに何も含まれていない場合.backspaceまたはdeleteキーが押された場合、その条件ブロック内のコードを実行します。

テキストボックスに含まれている場合、またはキー.を押した場合、上記の条件は失敗し、条件ブロックはステートメントを実行しません。backspacedeletereturn


backspace値に.(ドット)が含まれている場合に有効にする方法

次のように条件を変更します。

&& decimalval.indexOf('.') >= -1条件から外すだけ

(event.which == 8 || event.which == 46) 

AIM: はい、私の目的は、入力に複数のドットを入力しないことです (by @user)

完全なコード

$('.decimalValidate').on('keyup', function(e) {
    var decimalval = $(this).val();

    var decimalvalidate = ApplyDecimalFilter(decimalval, e);
    if (decimalvalidate == false) return false;
});



function ApplyDecimalFilter(id, event) {
    try {
        return NewDecimalFilter(id, event);
    } catch (e) {
        alert(e.message);
    }
}

function NewDecimalFilter(o, event) {
    if (o.match(/\./g) && o.match(/\./g).length > 1) {
        $(event.target).val(o.replace(/\.$/, ''))
        return false;
    }
    if ((event.which > 47 && event.which < 58) || event.which == 8 || event.which == 46) {
        return true;
    }
    return false;
}

作業サンプル

于 2012-06-29T09:22:17.707 に答える