if ... else语句和数组

时间:2012-04-24 02:20:00

标签: javascript

我正在尝试使用if ... else语句,并通过数组元素的值为变量stateCode赋值。有些东西不起作用,也许阵列不正确。 这是代码:

<!DOCTYPE html>
<html>
<head>
   <title>if...else</title>
<script type="text/javascript">

function choices() {
   var stateCode = document.getElementById("x").value;
   var taxes = new Array(10; 7.5; 3.2);
     if ("x" === "OR") {
     document.writeln(taxes[0]);
   } else if ("x" === "CA") {
     document.writeln(taxes[1]);
   } else if ("x" === "MO") {
     document.writeln(taxes[2]);
   }

}
</script>
</head>
<body>
<p>
   <select id="x" onchange="choices(this.value);">
     <option value = "">---Reset---</option>
     <option value = "MO">MO</option>
     <option value = "OR">OR</option>
     <option value = "CA">CA</option>
   </select>

</p>       
</body>
</html>

2 个答案:

答案 0 :(得分:1)

    if ("x" === "OR") {
     document.writeln(taxes[0]);
   } else if ("x" === "CA") {
     document.writeln(taxes[1]);
   } else if ("x" === "MO") {

"x"替换为stateCode,然后重试

并将var taxes = new Array(10; 7.5; 3.2);替换为:

var taxes = new Array(10, 7.5, 3.2);

应该有效,对我有用。

那怎么样:用这个替换你的整个功能:

function choices() {
    var stateCode = document.getElementById("x");
    var taxes = new Array(10, 7.5, 3.2);
    if (stateCode.value != "") {
        document.getElementById("taxes").innerHTML = taxes[stateCode.selectedIndex - 1];
    }
}

并在页面的某处添加<div id="taxes"></div>

答案 1 :(得分:1)

好吧,我不确定所有的仇恨来自哪里。但是,你有一些问题。

  1. document.writeln在javascript中永远不会好。它会覆盖文档。这意味着您的选择框将消失。
  2. 你必须有一个错字,因为你的字符串比较只是愚蠢。但是,使用===
  3. 做得很好
  4. 内联方法处理程序onchange="choices(this.value);"并不是最糟糕的事情。但是应该避免它们。使用javascript,您可以更轻松地处理浏览器之间的不同怪癖。
  5. 现代浏览器将有一种方法来调试此代码。 Firefox的Firebug,Internet Explorer中的F12(PC)以及webkit浏览器中的调试控制台。这些将告诉您行号,并允许您精确定位问题。
  6. 您当前正在内联处理程序中发送select的值,所以我只想使用它。
  7. new Array语法很麻烦。我避免使用括号[10, 3.2, 3]
  8. <小时/> 至于你的问题:

    添加HTML

    <div id="results"></div>
    

    ...

    function choices(stateCode) {
        var results = document.getElementById("results");
        var taxes = [10, 7.5, 3.2];
    
         switch(stateCode) {
            case "OR": 
                results.innerHTML = taxes[0];
                break;
            case "CA":
                results.innerHTML = taxes[1];
                break;
            case "MO":
                results.innerHTML = taxes[2];
                break;
            default:
                results.innerHTML = "No tax records for entry: " + stateCode;
                break;
         }
    }
    

    Example