-1

ユーザーが複数の小数点を入力できないようにする必要があります。記号と文字を許可しないコードが既にあり、これを思いついて、複数の小数点を許可しないようにしましたが、これは小数点を許可しません。

function ValidateDecimal(o) {
    if (o.value.length > 0) {

        var objReg = /^\d+(\.\d{1,2})?$/;
        if (objReg.test(o.value)) {
            o.style.backgroundColor = '';
            document.getElementById('submit').disabled = false;
        } else
            o.style.borderColor = 'red';
        o.style.fontWeight = 'bold';
        document.getElementById('submit').disabled = true;
        return false;

    }
}

誰でも見つけられるコード内に何か問題がありますか?

スタックオーバーフロー全体を見てきましたが、うまくいく解決策が見つかりませんでした。

4

3 に答える 3

2

else句には中括弧が必要です。正規表現自体は問題ありません。

if (objReg.test(o.value)) {
    o.style.backgroundColor = '';
    document.getElementById('submit').disabled = false;
} else {
    o.style.borderColor = 'red';
    o.style.fontWeight = 'bold';
    document.getElementById('submit').disabled = true;
}

中括弧がなければ、コードはこれと同等でした (基本的に、送信ボタンを常に無効にします)。

if (objReg.test(o.value)) {
    o.style.backgroundColor = '';
    document.getElementById('submit').disabled = false;
} else {
    o.style.borderColor = 'red';
}
o.style.fontWeight = 'bold';
document.getElementById('submit').disabled = true;
于 2013-10-02T10:17:13.980 に答える
0

このコードを使用できます

<form>
    <input type="text" id='myField' />

    <input type="submit" id="submit" value="Submit" />
</form>

<script>
var myField = document.getElementById('myField');
myField.addEventListener('input', function (prev) {
    return function (evt) {
        if (!/^\d+(?:\.\d{0,2})?$/.test(this.value)) {
          this.value = prev;
          this.style.borderColor = 'red';
          this.style.fontWeight = 'bold';
          document.getElementById('submit').disabled = true;
        }
        else {
          prev = this.value;
          this.style.borderColor = '';
          this.style.fontWeight = '';
          document.getElementById('submit').disabled = false;
        }
    };
}(myField.value), false);
</script>

(編集)

あなたのコメントに基づいて、複数のフィールドで機能する回答を編集しました。入力フィールドにクラス名を追加するだけで、javascript で処理できます

<form>
    <input type="text" class='decimalField'  />
    <input type="text" class='decimalField' />
    <input type="text" class='decimalField' />

    <input type="submit" id="submit" value="Submit" />
</form>

<script>
var decimalField = document.getElementsByClassName('decimalField');

for(var i = 0; i<decimalField.length; i++){
    decimalField[i].addEventListener('input', function (prev) {
        return function (evt) {
            if (!/^\d+(?:\.\d{0,2})?$/.test(this.value)) {
              this.value = prev;
              this.style.borderColor = 'red';
              this.style.fontWeight = 'bold';
              document.getElementById('submit').disabled = true;
            }
            else {
              prev = this.value;
              this.style.borderColor = '';
              this.style.fontWeight = '';
              document.getElementById('submit').disabled = false;
            }
        };
    }(decimalField[i].value), false);
}
</script>
于 2013-10-02T10:34:24.413 に答える