1

フィールドをチェックして、数字であるかどうかを判断しようとしています (. 以外の数字以外の文字は使用できません)。フィールドの値が数値の場合は、2 進数形式に変換します。現在、コードは FireFox と Chrome で動作していますが、Internet Explorer で問題が発生しています (複数のバージョン、具体的には IE8 と IE9 でテスト済み)。私は数時間それをいじっていましたが、問題の解決策を探すことができませんでした. Internet Explorer では、最初のフィールドのみが正しく機能します。他のフィールドは正しく機能せず、Internet Explorer はエラーをトリガーしません。

これは、html ファイル内の関連するコードです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">

 <head>
  <script type="text/javascript" src="amount.js"></script>
 </head>

 <body>
  <input type="text" id="amount1" onChange="changeAmount(this.id);"/>
  <input type="text" id="amount2" onChange="changeAmount(this.id);"/>
  <input type="text" id="amount3" onChange="changeAmount(this.id);"/>
  <input type="text" id="amount4" onChange="changeAmount(this.id);"/>
  <input type="text" id="amount5" onChange="changeAmount(this.id);"/>
 </body>
</html>

これは amount.js からの関連コードです。

function changeAmount(input)
{
   var pattern = /([^0-9\.])+/;
   var ctl = document.getElementById(input);
   var myvalue = ctl.value;

   if(myvalue != "" && !pattern.test(myvalue))
   {
     myvalue = parseFloat(myvalue);
     myvalue = myvalue.toFixed(2);
     if(!pattern.test(myvalue))
     {
        ctl.value = myvalue;
     }else
     {
        ctl.value = '';
     }
   }
}

ここでさらにいくつかのスレッドを参照して、解決策が見つからないかどうかを確認します。

事前に助けてくれてありがとう。

4

1 に答える 1

0

この HTML では:

<input type="text" id="amount1" onChange="changeAmount(this);"/>
<input type="text" id="amount2" onChange="changeAmount(this);"/>
<input type="text" id="amount3" onChange="changeAmount(this);"/>
<input type="text" id="amount4" onChange="changeAmount(this);"/>
<input type="text" id="amount5" onChange="changeAmount(this);"/>

この Javascript を使用してみてください:

function changeAmount(input) {
    var myvalue = input.value;
    myvalue = parseFloat(myvalue);
    if (!isNaN(myvalue)) {
        input.value = myvalue.toFixed(2);
    } else {
        input.value = "";
    }
}

デモ: http://jsfiddle.net/7rDeg/4/

this関数の代わりに渡すという私の推奨される変更を使用this.valueします。

また、正規表現は必要ありません。で値を解析してみてparseFloatください。成功した場合は、小数点以下 2 桁で数値を修正し、入力の値を再設定します。それ以外の場合は、テキスト ボックスをクリアします。

アップデート:

これで問題なく動作するはずですが、インライン イベント ハンドラは使用しないことをお勧めします。たとえば、次の HTML を使用するのが理想的です。

<input type="text" id="amount1" />
<input type="text" id="amount2" />
<input type="text" id="amount3" />
<input type="text" id="amount4" />
<input type="text" id="amount5" />

このJavascriptで:

function changeAmount() {
    var myvalue = this.value;
    myvalue = parseFloat(myvalue);
    if (!isNaN(myvalue)) {
        this.value = myvalue.toFixed(2);
    } else {
        this.value = "";
    }
}

function addEvent(element, eventName, callback) {
    if (element.addEventListener) {
        element.addEventListener(eventName, callback, false);
    } else if (element.attachEvent) {
        element.attachEvent("on" + eventName, callback);
    } else {
        element["on" + eventName] = callback;
    }
}

window.onload = function () {
    var inputs = document.getElementsByTagName("input");
    for (var i = 0; i < inputs.length; i++) {
        if (inputs[i].type === "text") {
            addEvent(inputs[i], "change", changeAmount);
        }
    }
};

デモ: http://jsfiddle.net/7rDeg/6/

注:を使用parseFloatすると、末尾の数字以外の文字が削除されます。たとえば、入力 "234.35234a" は "234.35234" として解析され (したがって!isNaN(myvalue)条件を通過)、"234.35" として固定されます。これが発生したくない場合は、次を使用します。

myvalue = +myvalue;

行の代わりにparseFloat

于 2013-04-17T19:56:16.630 に答える