JavaScript:我可以通过查询调用哪个函数来声明变量吗? (新手)

时间:2012-03-20 17:20:55

标签: javascript function variables

我正在尝试修改现有的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同样会更改,但也会更改。

我完全失去了。

1 个答案:

答案 0 :(得分:1)

这很丑陋,但你可以通过拥有一个全局变量isDonation来解决这个问题。将additem的开头设置为false,并将其设置为adddonation中的true。然后在writeitems函数中,您可以检查该值并使用它来调节输出。