は推奨され.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
ています:delete
(event.which == 8 || event.which == 46) && decimalval.indexOf('.') == -1
そのような検証を設定します:
テキストボックスに何も含まれていない場合.
、backspace
またはdelete
キーが押された場合、その条件ブロック内のコードを実行します。
テキストボックスに含まれている場合、またはキー.
を押した場合、上記の条件は失敗し、条件ブロックはステートメントを実行しません。backspace
delete
return
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;
}
作業サンプル