【问题标题】:JavaScript: Can I declare a variable by querying which function is called? (Newbie)JavaScript:我可以通过查询调用哪个函数来声明变量吗? (新手)
【发布时间】:2012-03-20 17:20:55
【问题描述】:

我正在使用我正在尝试修改的现有 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=新数组; var 购物车=新数组; 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 也同样会更改,但也会通用。

我完全不知所措。

【问题讨论】:

  • 你不应该有两个相同函数,但我认为你的意思是几乎相同。就是说,你能创建一个fiddle,同时具有函数和一些最小的html吗?
  • 我真的对 JavaScript 编程一无所知。我可以对现有代码进行简单的、非编程的调整,但恐怕此时我已经超出了我的能力范围。

标签: javascript function variables


【解决方案1】:

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

【讨论】:

  • 感谢您的回复。不幸的是,我对 JS 的了解还不够,无法实现您的建议(尽管我抽象地理解它)。如果我设置一个全局变量,它不会覆盖我在 additem 和 adddonation 函数中给它的任何值吗?
  • 另外,你能提供一个如何检查值和创建条件语句的例子吗?我已经使用我找到的基本 JS 教程进行了一些尝试,但我做错了,因为每种情况下的输出都保持不变。很抱歉成为害虫。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 2016-02-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多