0

フォームに基づいてすべてのアイテムを追加し、それらのアイテムの最小のものを差し引いて新しい合計を作成するスクリプトがあります。結果をフォームで返すことができるようにしたい。

JavaScript:

var prices = [];

function remove(arr,itm){
    var indx = arr.indexOf(itm);
    if (indx !== -1){
        arr.splice(indx,1);
    }
}

function calculateSectedDues(checkbox, amount) {
    if (checkbox.checked === true) {
        prices.push(amount);
    } else {
        remove(prices, amount);
    }

    var total = 0;
    for (var i = 0, len = prices.length; i < len; i++)
        total += prices[i];

    var min = prices.slice().sort(function(a,b){return a-b})[0];
    if(typeof min === 'undefined') min = 0;

    var withDiscount = total - min;
    var discountAmount = withDiscount - total;

    //document.grad_enroll_form.total.value = total;
    document.querySelector("#value").innerHTML = "Total: $"+total+'<br>';
    document.querySelector("#value").innerHTML += "Discount: $"+discountAmount+'<br>';
    document.querySelector("#value").innerHTML += "New total: $"+withDiscount+'<br>';
}

HTML:

<label><input type="checkbox" onclick="calculateSectedDues(this,5)" name="Scarf"> <span>Scarf</span><label><br>
<label><input type="checkbox" onclick="calculateSectedDues(this,10)" name="Hat"> <span>Hat</span><label><br>
<label><input type="checkbox" onclick="calculateSectedDues(this,20)" name="Jacket"> <span>Jacket</span><label><br>

<span id="value">Total: $0<br>Discount: $0<br>New total: $0</span>

3 つの異なる合計があることに気付くでしょう。フォームから送信したいのは、最終的な合計だけです。フォームは完全に機能しており、うまく機能しています。これらの結果をフォームに含めたいだけです。

&ここに実際のリンクがあります:

http://jsfiddle.net/danielrbuchanan/yjrTZ/5/

4

1 に答える 1

0

コメント (および質問) に答えるには:

フォームにフィールドを追加し<input type="hidden" name="finalTotal">
てから、関数を次のようcalculateSectedDuesに終了させます。document.getElementById('finalTotal').value=withDiscount;

一緒にすると、次のようになります (少しリファクタリングします。「値」で行ったことを見てください):

function calculateSectedDues(checkbox, amount) {
    if (checkbox.checked) {
        prices.push(amount);
    } else {
        remove(prices, amount);
    }

    var total = 0, i = 0, len = prices.length;
    for (; i < len; i++) {
        total += prices[i];
    }

    var min = prices.slice().sort(function(a,b){return a-b})[0];
    if(typeof min === 'undefined') min = 0;

    var withDiscount = total - min;
    var discountAmount = withDiscount - total;

    //document.grad_enroll_form.total.value = total;
    document.getElementById('value').innerHTML = "Total: $"+total+'<br>'
                                               + "Discount: $"+discountAmount+'<br>'
                                               + "New total: $"+withDiscount+'<br>';
    //set hidden input value
    document.getElementById('finalTotal').value = withDiscount; 
}

このフォームを送信すると、サーバーが受信するポスト データには、「withDiscount」の値を含む「finalTotal」という値が含まれます。

お金が関係している場合、実生活でこれを(特に信頼して)絶対にしないでください。誰でも好きなように投稿できます!!

于 2013-04-18T20:50:13.893 に答える