-2

重複の可能性:
この Javascript の何が問題になっていますか? ショッピングカート

この JavaScript には、まったく機能しないものがあります。単純化も素晴らしいでしょう:)

var computer = new Array();

computer[0] = "10001, Nvidia Geforce GTX 690, 1200";
computer[1] = "10002, Raedon HD 7950, 450";
computer[2] = "20001, Ivy Bridge i7 3770, 400";
computer[3] = "20002, Ivy Bridge i7 3770k, 420";
computer[4] = "20003, Sandy Bridge i7 2700k, 340";
computer[5] = "20004, Bulldozer FX-8150, 270";
computer[6] = "30001, Antec eleven-hundred, 120";
computer[7] = "30002, Coolermaster HAF-X, 170";
computer[8] = "30003, Antec three-hundred, 50";
computer[9] = "30004, Corsair 550D, 160";
computer[10] = "40001, INTEL-ASrock fatal1ty Z77 Professional Motherboard, 250";
computer[11] = "40002, INTEL-ASrock Z77 extreme9 Motherboard, 350";
computer[12] = "40003, AMD-ASrock fatal1ty 990FX Professional Motherboard, 240";
computer[13] = "40004, AMD-ASUS Sabertooth 990FX Motherboard, 260";

すべてのチェックボックス機能にチェックを入れる

function check() { 

var leftSide = document.getElementById('table_container_left');
var inputs = leftSide.getElementsByTagName('input');
for (x=0; x<=inputs.length-1; x++)  {
    if(inputs[x].type == 'text')  {
        inputs[x].value = 1;
    } else {
        inputs[x].checked = true;
    }
}
}

すべてのチェックボックス機能のチェックを外します

function uncheck() { 

var leftSide = document.getElementById('table_container_left');
var inputs = leftSide.getElementsByTagName('input');
for (x=0; x<=inputs.length-1; x++)  {
    if(inputs[x].type == 'text')  {
        inputs[x].value = 0;
    } else {
        inputs[x].checked = false;
    }
}
}

チェックした商品をカートに入れる

function addItems() { 
var leftSide = document.getElementById('table_container_left');
var rightSide = document.getElementById('table_container_right');
var inputs = leftSide.getElementByTagName('input');
var totalPrice = 0;
var basketTable = "<h3>My Basket:</h3><table><thead><tr><th>Item</th><th>Quantity</th><th>price</th><th>Sub-total</th></tr></thead><tbody>";
for (x=0; x<=inputs.length-1; x++)  {
    if(inputs[x].type == 'checkbox' && inputs[x].checked == true)  {
        var quantity = ParseFloat(inputs[x+1).value);
        var itemName = computer[x/2].split(",")[1];
        var itemPrice = parseFloat(computer[x/2].split(",")[2])
        var itemTotal = parseFloat(quantity*itemPrice);
        totalPrice += itemTotal;
        basketTable += "<tr><td>"+itemName+"</td><td>"+quantity+"</td><td>$"+itemPrice+"</td><td>$"+itemTotal+"</td></tr>";
    }
}
basketTable +=" <tr><td> colspan='3'><b>Total:</b></td><td><b>$"+totalPrice+"</b></td></tr></tbody><table>";
rightsSide.innerHTML = basketTable;
}

アイテムがチェックされたときに数量を 1 に更新する

function updateQty(id)  {

var targetRow = document.getElementById(id);
var qtyBox = targetRow.getElementsByTagName('input')[1];
if (qtyBox.value == 0)  {
    qtyBox.value = 1;
} else {
    qtyBox.value = 0;
}
}

要求された HTML は次のとおりです。

    <form name="myForm" action="index.html" method="post">

        <div id="table_container_left">

                    <button onclick="check();">Select All</button>

                    <button onclick="uncheck();">Unselect All</button>

                    <button onclick="addItems();">Add Items</button>

            <table>

                <thead>

                        <th><u>Item Code</u></th>

                        <th><u>Item</u></th>

                        <th><u>Qty</u></th>

                        <th><u>Price</u></th>

                </thead>

                <tbody>



<script type="text/javascript">

for(x=0; x<=computer.length-1; x++) {

document.write("<tr id='"+x+"'><td><label><input type='checkbox' name='item' value='"+x+"'     onclick='updateQty('"+x+"');'/> "+computer[x].split(",")[0]+"</label></td><td>"+computer[x].split    (",")[1]+"</td><td> <input name='qty' id='qty' type='textbox' value='0' onchange='qtychange    ('"+x+"');'/></td><td>$"+computer[x].split(",")[2]+"</td></tr>");

}

</script>







                </tbody>

            </table>

        </div>



        <div id="table_container_right">

            <table id="shoppingBasket">













                    <input name='selectAll' type='button' value='Select All' onclick="itemSelected();"/>

                    <input name='clearAll' type='button' value='Clear All' onclick=""/>

                    <input name='removeItem(s)' type='button' value='Remove Item(s)' />

                    <input name='sortItemCode' type='button' value='Sort by Item Code' disabled='disabled' />

                    <input name='sortPrice' type='button' value='Sort by Price' disabled='disabled' />

                </tbody>

            </table>

        </div>



</div>



</form>
4

3 に答える 3

1

適用すると問題が解決する場合としない場合があるいくつかの注意事項:

  • ParseFloat代わりにparseFloat
  • 属性は文字列である必要がありますが、整数であるかのように参照することがよくあります。
  • computer[x/2]10 進配列インデックスになる可能性のある があります。
  • forループ内で変数宣言を繰り返し、
  • innerHTMLDOM の代わりに使用されます。
于 2012-07-18T01:16:20.470 に答える
0

(答えではありません。)

少なくとも2つの注意点がある、1つの簡略化を次に示します。

  1. 単にチェックボックスを設定する以外のことをするので、名前の悪い関数。
  2. DOM操作を簡素化するJSフレームワークを使用することをお勧めします。
function check() {
    setChecks(false);
}

function uncheck() {
    setChecks(true);
}

function setChecks(checked) {
    var leftSide = document.getElementById('table_container_left');
    var inputs = leftSide.getElementsByTagName('input');
    var textValue = checked ? "1" : "0";
    var x;

    for (x = 0; x < inputs.length; x++)  {
        if (inputs[x].type == 'text')  {
            inputs[x].value = textValue;
        } else {
            inputs[x].checked = checked;
        }
    }
}

すぐに配列の初期化とオブジェクトを使用することを検討します。また、コンピュータを保持しているオブジェクトは、それと呼ばれる必要があります– computers。ではありませんcomputer。それはそれらのコレクションです。複数。

var computers = [
  { id: "10001", name: "Nvidia Geforce GTX 690", price: 1200 },
  { id: "10002", name: "Raedon HD 7950", price: 450 },
  // ...
];
于 2012-07-18T01:20:04.937 に答える
-1

配列を使用しているとしたら、完全に独り占めして実際に使用してみませんか?

computer[0] = [10001, "blah blah blah"];
computer[1] = [10002, "foo bar baz"];

等々?おしゃれなキャビネットを買って、それをペーパーウェイトとして使っているようなものです。

于 2012-07-18T01:11:52.760 に答える