首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript中的多个IF和ELSE IF

javascript中的多个IF和ELSE IF
EN

Stack Overflow用户
提问于 2010-07-13 09:13:13
回答 4查看 28.9K关注 0票数 5

因此,推送到这个数组中的内容取决于几个单选框。我为标准座椅和轮椅座椅准备了:

代码语言:javascript
复制
if(document.getElementById('standardseat').checked) {
  //Standard seat is checked
seatsArray.push(e.posX, e.posY);
}
else if(document.getElementById('wheelchairseat').checked) {
  //Wheelchair seat is checked
seatsArray.push("Wheelchair " + e.posX, e.posY);
}

这是等效的表单代码:

代码语言:javascript
复制
<input id="standardseat" type="radio" name="seat" value="standard" /> Standard seat
<input id="wheelchairseat" type="radio" name="seat" value="wheelchair" /> Wheelchair seat

但我想增加一些收音机盒子,与标准/轮椅座椅分开:

代码语言:javascript
复制
<input id="backnave" type="radio" name="area" value="backnave" /> Back Nave
<input id="frontnave" type="radio" name="area" value="frontnave" /> Front nave
<input id="middlenave" type="radio" name="area" value="middlenave" /> Middle nave

我希望推送也包括这一点。为了解释,如果用户勾选了“轮椅座位”和“中间正厅”,推送应该输出("MN,轮椅“+ e.posX,e.posY)。有没有办法在不手动为每个可能的结果包含许多其他假设的情况下实现这一点(我甚至可能想要添加第三组单选框)?

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-07-13 09:39:39

我将使用相对较少的if语句构建描述主席的字符串,然后在最后调用push

所以就像这样:

代码语言:javascript
复制
var desc = "";
if(document.getElementById('wheelchairseat').checked) {
  //Wheelchair seat is checked
  desc = "Wheelchair "+desc;
}

if(document.getElementById("backnave").checked) {
  desc = "BN, "+desc;
} else if(document.getElementById("middlenave").checked) {
  desc = "MN, "+desc;
} else if(document.getElementById("frontnave").checked) {
  desc = "FN, "+desc;
}

seatsArray.push(desc + e.posX, e.posY);

这可以很容易地扩展到考虑到额外的区块组。

票数 13
EN

Stack Overflow用户

发布于 2010-07-13 10:16:50

你是对的,IceDragon,使用多个if/else是没有意义的,因为每次添加选项时,你都必须重写代码。有许多方法可以避免这种情况。这里只有一种方法:

代码语言:javascript
复制
<html><body>
  <form>
    <p>
      <input type="radio" name="seat" onclick="chose(this, 'Standard')" /> Standard seat
      <input type="radio" name="seat" onclick="chose(this, 'Wheelchair')" /> Wheelchair seat
    </p><p>
      <input type="radio" name="area" onclick="chose(this, 'BN')" /> Back Nave
      <input type="radio" name="area" onclick="chose(this, 'FN')" /> Front nave
      <input type="radio" name="area" onclick="chose(this, 'MN')" /> Middle nave
    </p>
  </form>
  <script>
    // make sure to put these in the order you wish them to appear in the output
    var selections = { area: '', seat: '' };
    var seatsArray = [];
    function chose(input, value) {
      selections[input.name] = value;
    }
    // call this function when user clicks the floor plan:
    function image_clicked(e) {
      var desc = [];
      for (var i in selections) if (selections[i] != '') desc.push(selections[i]);
      seatsArray.push(desc.join(', ') + ' ' + e.posX, e.posY);
    }
  </script>
</body></html>

注意,在selections对象中,我们跟踪用户到目前为止所做的选择。然后,当用户单击图像(或任何触发您正在处理的代码的内容)时,该函数只是对已经收集的值进行格式化。

我编写这段代码的方式的一个缺点是,浏览器倾向于缓存单选按钮的状态,因此可能已经选择了一个单选按钮,但没有调用chose()函数。一种快速而肮脏的解决方法是将ID添加到表单标记,并在页面加载时运行以下代码:

代码语言:javascript
复制
document.getElementById('form').reset();

其中' form‘是form标记的ID属性。

票数 3
EN

Stack Overflow用户

发布于 2010-07-13 09:27:12

一般来说,当您有大量的if/else-if时,可以考虑用switch/case语句替换它们。

http://www.javascriptkit.com/javatutors/switch.shtml

现在,这不一定适合您的情况,因为座椅的类型与其位置(前/中/后)是分开的。

也许有一种比你的代码更优雅的方法,但我不能完全理解上下文。你对这个数组做了什么?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3233506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档