1

HTML フォームで記述している次の JavaScript コードがあります。

  <script type="text/javascript">
    function updatesum() {
    document.functie.column8.value = (document.functie.column6.value -0) * (document.functie.column7.value -0);
    document.functie.column12.value = (document.functie.column10.value -0) * (document.functie.column11.value -0);
    document.functie.column16.value = (document.functie.column14.value -0) * (document.functie.column15.value -0);
    document.functie.column20.value = (document.functie.column18.value -0) * (document.functie.column19.value -0);
   }

次のようなphpフォームを使用します。

echo "<td><input name=\"column6\" onChange=\"updatesum()\"></td>";
echo "<td><input name=\"column7\" onChange=\"updatesum()\"></td>";
  1. 問題は、最初の形式にいくつかの値を入力すると合計が得られることですが、いくつかの値を入力しないとゼロになり、これは望ましくありません。

    http://img17.imageshack.us/img17/5456/hyhu.png http://img17.imageshack.us/img17/5456/hyhu.png

  2. 一番下には、3 番目の列のすべての値の合計がありますが、2400 または 2300.44 のような数値が得られ、2,400 を出力するか、2300.44 を 2,300 に切り上げたいと考えています。どうやってやるの?

4

1 に答える 1

1

1/ '' 自動的に整数にキャストされるため、0 という値で乗算します。0 になるのは正常です。これを望まない場合は、次の値をチェックする関数を作成する必要があります。入力のいずれかが '' の場合、次のように '' を返します。

function multiply(v1, v2) {
    if (v1 === '' || v2 === '' || isNaN(v1) || isNaN(v2)) {
        return '';
    } 
    return v1*v2;
}

2/コードをフォーマットし、必要な場所を追加して小数点以下を取得するフォーマット関数を追加する必要があります,(または、そのコメントjavascript updatesum()の問題のリンクを使用します):

function formatNumber(num) {
    var formatted = '';
    num = Math.ceil(num) + '';
    for (var i = num.length - 1, j = 0; c = num.charAt(i); i--) {
        if (j % 3 === 0) {
            c = c + ',';
        }
        formatted = c + formatted;
        j++;
    }
    return formatted.trim();
}

あなたは例を求めました。これは、現在のupdatesum関数の代わりにそれを行う必要があります:

function multiply(v1, v2) {
    if (v1 === '' || v2 === '' || isNaN(v1) || isNaN(v2)) {
        return '';
    } 
    return v1*v2;
}
function multiplyAndFormat(v1, v2) {
    return formatNumber(multiply(v1, v2));
}

function formatNumber(num) {
    var formatted = '';
    num = Math.ceil(num) + '';
    for (var i = num.length - 1, j = 0; c = num.charAt(i); i--) {
        if (j % 3 === 0) {
            c = c + ',';
        }
        formatted = c + formatted;
        j++;
    }
    return formatted.trim();
}

function updatesum() {
    document.functie.column8.value = multiplyAndFormat(document.functie.column6.value, document.functie.column7.value);
    document.functie.column12.value = multiplyAndFormat(document.functie.column10.value, document.functie.column11.value);
    document.functie.column16.value = multiplyAndFormat(document.functie.column14.value, document.functie.column15.value);
    document.functie.column20.value = multiplyAndFormat(document.functie.column18.value, document.functie.column19.value);
}

やるべき

于 2013-07-20T18:24:28.710 に答える