javascript - 关闭 jscript for 循环到 switch 语句

标签 javascript for-loop switch-statement

用 switch 语句替换 for 循环?

最佳答案

您不必遍历所有单选按钮即可找到单击的单选按钮。您可以将单击的元素直接传递给您的函数:

function planeChoice(element) {
    // element refers to the clicked radio button
    var plane = element.value;

    switch (plane) {
         //...
    }
}

要使其发挥作用,您必须通过 this到你的函数:

<input type="radio"  name="planeButton"  value="152"
       onclick="planeChoice(this)" />

this指的是您将事件处理程序附加到的 HTML 元素,因此在本例中它指的是 <input>元素。


要了解有关事件的更多信息,我建议阅读 http://quirksmode.org 上的文章,从 Introduction to Events 开始和 Early event handlers .


进一步改进的两个建议:

(A) 您可以使用 ma​​p (它只是 JavaScript 中的一个普通对象)而不是 switch判断对应消息的语句:

var map = {
   "152": "A small two-place-airplane for flight training",
   "172": "The smaller of two four-place airplanes"
   // ...
};

map 也更容易维护(扩展)。

获得单选按钮的值后,您可以通过以下方式访问消息:

 alert(map[plane]);

您不限于仅存储原始值(如字符串),如果您想做一些更复杂的事情,您还可以存储函数并调用它们。但要了解有关函数以及如何使用它们的更多信息,您应该阅读 JavaScript 指南。

(B) 您可以使用事件委托(delegate),而不是将相同事件处理程序绑定(bind)到每个元素(这可以通过 event bubbling 实现)。 click事件处理程序附加到 <form>元素:

<form onclick="planeChoice(event)" ...>

或者更好的是,获取对表单元素的引用并通过 JavaScript 附加事件处理程序:

document.getElementById("myForm").onclick = planeChoice;

传递的事件对象包含有关单击哪个元素的信息:

function planeChoice (event) {
    event = event || window.event; // for IE
    var target = event.target || event.srcElement; // for IE

    if(target.type === "radio") { // if a radio button is clicked
        var plane = target.value;
        // ... further code
    }
}

关于javascript - 关闭 jscript for 循环到 switch 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5365636/

相关文章:

php - 从提示符返回 javascript 数据到 html/php

javascript - 试图理解 rövarspråket 翻译器

javascript - for 循环中添加数字不断增加的新输入时出现的问题

带有字符串参数的javascript新日期有错误的日期

javascript - 使用 sails.js 编写密码重置

javascript - 如何使用 $localstorage 在 Angularjs 中添加投票系统

python - 如何加速 Python 中的嵌套 for 循环

c# - 有没有办法重构 C# 独有的 switch 语句?

MySQL - 1 id 多行并将多列数据转换为逗号分隔行

php - 开关条件评估不正确为零