簡體   English   中英

JavaScript:是否可以通過查詢調用哪個函數來聲明變量? (新手)

[英]JavaScript: Can I declare a variable by querying which function is called? (Newbie)

我正在嘗試修改一個現有的JavaScript驅動的購物車模塊。 我不知道JS,並且由於各種原因需要使用已有的東西。

為我的數量框顯示的文本是在現有功能中定義的:

function writeitems() {

var i;
for (i=0; i<items.length; i++) {
    var item=items[i];
    var placeholder=document.getElementById("itembuttons" + i);
    var s="<p>";

    // options, if any
    if (item.options) {
        s=s+"<select id='options"+i+"'>";
        var j;
        for (j=0; j<item.options.length; j++) {
            s=s+"<option value='"+item.options[j].name+"'>"+item.options[j].name+"</option>";
        }
        s=s+"</select>&nbsp;&nbsp;&nbsp;";
    }



// add to cart

    s=s+"Quantity: <input id='quantity"+i+"' value='1' size='3'/> ";

    s=s+"<input type='submit' value='Add to Cart' onclick='addtocart("+i+"); return false;'/></p>";
    }


    placeholder.innerHTML=s;
}
refreshcart(false);
}

我有兩種不同類型的數量輸入框; 一個(捐贈)必須以美元符號開頭,一個(項目)應為空白。

我采用了現有的additem函數,將其復制並重命名,以便有兩個相同的函數,一個用於項,另一個用於捐贈。 additem函數如下:

function additem(name,cost,quantityincrement) {
if (!quantityincrement) quantityincrement=1; 
var index=items.length;
items[index]=new Object;
items[index].name=name;
items[index].cost=cost;
items[index].quantityincrement=quantityincrement;

document.write("<span id='itembuttons" + index + "'></span>");

return index;

}

有沒有一種方法可以基於調用哪個函數(additem或adddonation)來聲明全局變量,以便可以將其添加到writeitems函數中,以便根據需要顯示或隱藏美元符號? 還是有更好的解決方案?

由於購物車頁面的當前編碼方式,我無法在購物車頁面的正文中使用HTML,因此我要依靠JS來處理它。

歡迎任何新手幫助。 謝謝!

更新3/22:好的,我已經編輯了.js文件,如下所示:var items = new Array; var cart = new Array; var isDonation = false;

function additem(name,cost,quantityincrement) {
var isDonation=false;
if (!quantityincrement) quantityincrement=1; 
var index=items.length;
items[index]=new Object;
items[index].name=name;
items[index].cost=cost;
items[index].quantityincrement=quantityincrement;

document.write("<span id='itembuttons" + index + "'></span>");

return index;
}

function adddonation(name,cost,quantityincrement) {
var isDonation=true;
if (!quantityincrement) quantityincrement=1; 
var index=items.length;
items[index]=new Object;
items[index].name=name;
items[index].cost=cost;
items[index].quantityincrement=quantityincrement;

document.write("<span id='itembuttons" + index + "'></span>");

return index;
}

...

function writeitems() {

var i;
for (i=0; i<items.length; i++) {
    var item=items[i];
    var placeholder=document.getElementById("itembuttons" + i);
    var s="";

    // options, if any
    if (item.options) {
        s=s+"<select id='options"+i+"'>";
        var j;
        for (j=0; j<item.options.length; j++) {
            s=s+"<option value='"+item.options[j].name+"'>"+item.options[j].name+"</option>";
        }
        s=s+"</select>&nbsp;&nbsp;&nbsp;";
    }



// add to cart
    if (!isDonation) {
    s=s+"<input id='quantity"+i+"' size='3' type='hidden'/>";
    s=s+"<input type='submit' value='Add to Cart' onclick='addtocart("+i+"); return false;'/><br /><br />";
    }
    else {

    s=s+"$<input id='quantity"+i+"' size='3'/>.00 ";
    s=s+"<input type='submit' value='Add to Cart' onclick='addtocart("+i+"); return false;'/><br /><br />";
    }

    placeholder.innerHTML=s;
}
refreshcart(false);
}

結果頁面沒有區別additem和adddonation函數是輸出。 將if / else語句更改為isDonation = true會普遍更改所有輸出,而isDonation = false也會同樣更改,但也會更改。

我完全不知所措。

這很丑陋,但是您可以通過使用全局變量isDonation解決此問題。 在添加項的開頭將其設置為false,在添加時將其設置為true。 然后,在writeitems函數中,您可以檢查該值並將其用於調節輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM