0

我编写了一个简单的 JavaScript 函数,它可以让网站访问者查看公司向该位置交付产品的成本。这只是一个让他们从下拉菜单中选择城市然后显示价格的功能。下面是我决定如何定义我希望打印的变量。

var delivery=document.getElementById("delivery").value; //id of selection box

var deliveryCharge;
if (delivery=="None")
{
deliveryCharge=0;
}
else if (delivery=="Acworth")
{
deliveryCharge=175;
}
else if (delivery=="Alpharetta")
{
deliveryCharge=140;
}

然后我用...

document.getElementById("charge").innerHTML="$" + deliveryCharge.toFixed(2);

显示金额。问题是我需要在 HTML 输入和 JavaScript 中放置 400 个位置。我想知道的是你们将如何处理这个函数,有没有更有效的方法让我不必写 400 else if 语句?(ps) 位置和价格之间没有数学相关性。)

提前感谢大家的时间和回复。

4

4 回答 4

4

很简单,使用一个对象:

var deliveryCharges = {
    "None": 0,
    "Alpharetta": 400,
    "Test": 200
};
function getDeliveryCharge(type) {
    var currentType = type || "None"; // undefined and null out of the way.
    if (typeof deliveryCharges[currentType] !== 'undefined') {// No error thrown here.
        return deliveryCharges[currentType];// type recognized return it
    } else {
        return 0;// type not found, just return 0;
    };
};

现在真正得到它:

var delivery= getDeliveryCharge(document.getElementById("delivery").value);
于 2013-05-03T16:47:51.207 回答
2

首先想到的是一张地图,如下所示:

var map = {
    'None': 0,
    'Acworth': 175,
    ...
};
于 2013-05-03T16:47:08.273 回答
0

除了object已经建议的选项之外,我肯定会建议放弃这种方法并采用更灵活的方法。城市和自治市每年都会合并和创建,因此维护您的收藏将是地狱。我建议对服务器使用 Ajax 回调,您可以在其中调用 Google Maps API 来提供到交付位置的实际距离的估计值,然后对其应用一个简单的公式(如果需要,仅当它不在附近城市的一组预定义成本)。

于 2013-05-03T16:51:09.777 回答
0

为了补充阿尔贝托的答案,也许还将交付地点划分为区域,然后将您的位置映射到这些区域?这样,您可以在成本发生变化时同时更改整个组的交货价格。(更改区域价格,而不是同一区域内的 37 个单独价格。)

这在代码中可能效率较低,但在可维护性方面效率更高。

(当然,除非所有 400 个地点都真正具有独特的价格。那么就没有必要了。)

于 2013-05-03T16:51:44.130 回答