【问题标题】:Javascript points calculator not working (HTML select/options + Javascript)Javascript 积分计算器不工作(HTML 选择/选项 + Javascript)
【发布时间】:2013-05-25 03:24:43
【问题描述】:

来自瑞典的下午好! 我的 javascript 代码有问题,它在试图让它从我的成绩中计算我的分数时给了我“NaN”。它应该检查它是哪个分数,然后取它的价值并将其添加到最终分数中,当按下按钮时会发出警报。 Javascript:

var biobetyg;
var bildbetyg;

function bBio() {
    var bio = document.getElementById("bio");
    var biobe = bio.options[bio.selectedIndex].value;
    if ((biobe === "-") || (biobe === "f")) {
        biobetyg = 0;
    } else if (biobe === "e") {
        biobetyg = 10;
    } else if (biobe === "d") {
        biobetyg = 12.5;
    } else if (biobe === "c") {
        biobetyg = 15;
    } else if (biobe === "b") {
        biobetyg = 17.5;
    } else if (biobe === "a") {
        biobetyg = 20;
    }
}

function bBild() {
    var bild = document.getElementById("bild");
    var bildbe = bild.options[bild.selectedIndex].value;
    if ((bildbe === "-") || (bildbe === "f")) {
        bildbetyg = 0;
    } else if (bildbe === "e") {
        bildbetyg = 10;
    } else if (bildbe === "d") {
        bildbetyg = 12.5;
    } else if (bildbe === "c") {
        bildbetyg = 15;
    } else if (bildbe === "b") {
        bildbetyg = 17.5;
    } else if (bildbe === "a") {
        bildbetyg = 20;
    }
}
var merit = bildbetyg + biobetyg;

function GetSelectedItem() {
    var strSel = "The Value is: " + merit + " and text is: ";
    alert(strSel);
}

HTML:

<form>
<h1>Bild</h1>
<h2>Välj ditt betyg i bild:</h2>
<select id="bild" onchange="bBild()">
  <option class="f" value="-">-</option>
  <option class="f" value="f">F</option>
  <option class="go" value="e" selected>E</option>
  <option class="go" value="d">D</option>  
  <option class="go" value="c">C</option>
  <option class="go" value="b">B</option>
  <option class="go" value="a">A</option>
</select>
<select id="bio" onchange="bBio()">
  <option class="f" value="-">-</option>
  <option class="f" value="f">F</option>
  <option class="go" value="e" selected>E</option>
  <option class="go" value="d">D</option>  
  <option class="go" value="c">C</option>
  <option class="go" value="b">B</option>
  <option class="go" value="a">A</option>
</select>
<input type="button" value="Press to Confirm" onClick="GetSelectedItem();">
</form>

【问题讨论】:

  • 旁白:Google 'javascript switch'
  • 为什么不将选项的值设为这些数字?

标签: javascript forms select if-statement options


【解决方案1】:

正如 Pointy 指出的,我建议将您的 html 更改为:

<form>
<h1>Bild</h1>
<h2>Välj ditt betyg i bild:</h2>
<select id="bild" onchange="bBild()">
  <option class="f" value="0">-</option>
  <option class="f" value="0">F</option>
  <option class="go" value="10" selected>E</option>
  <option class="go" value="12.5">D</option>  
  <option class="go" value="15">C</option>
  <option class="go" value="17.5">B</option>
  <option class="go" value="20">A</option>
</select>
<select id="bio" onchange="bBio()">
  <option class="f" value="0">-</option>
  <option class="f" value="0">F</option>
  <option class="go" value="10" selected>E</option>
  <option class="go" value="12.5">D</option>  
  <option class="go" value="15">C</option>
  <option class="go" value="17.5">B</option>
  <option class="go" value="20">A</option>
</select>
<input type="button" value="Press to Confirm" onClick="GetSelectedItem();">
</form>

因此您可以避免使用ifs(甚至使用switch(),这将是一个更好的选择,然后您可以将您的JavaScript 更改为(parseFloat() 部分是为了避免将这些值视为字符串,因为这只会连接而不是将数字相加):

function bBio()
{
    var bio = document.getElementById("bio");
    var biobetyg = parseFloat(bio.options[bio.selectedIndex].value);
    return biobetyg;
    }

function bBild()
{
var bild = document.getElementById("bild");
    var bildbetyg = parseFloat(bild.options[bild.selectedIndex].value);
    return bildbetyg;

}

function GetSelectedItem()
{
    var merit = bBio() + bBild();
    var strSel = "The Value is: " + merit + " and text is: ";
    alert(strSel);
}

这大大减少了你的 JS 代码,我认为它更具可读性......(除了实际工作之外

WORKING DEMO

【讨论】:

  • 我认为他不希望 parseInt() 获得像“12.5”这样的值。
  • @Pointy 谢谢好点我完全忘记了:) 我只是把它改成parseFloat()
【解决方案2】:

问题在于这一行:

var merit = bildbetyg + biobetyg;

在这两个函数中的任何一个运行之前设置变量“merit”。它不会因为其他两个变量发生变化而自动重新计算。

将这行代码移到“GetSelectedItem”函数中,事情应该会更好。

您还需要初始化这两个变量,以便如果在值更改之前单击按钮,它仍然可以工作。事实上,您可以让“GetSelectedItem”函数在计算总和之前简单地调用这两个函数本身。

【讨论】:

  • 是的,他们应该,但他们没有。也不要那样工作。
  • @TommieMichaelLagerroos jsbin.com/akoniz/1 它确实有效,但您仅在选择元素更改时执行计算。如果您单击“确认”而不更改选择,则这两个变量永远不会设置为任何值。
  • 是的,很抱歉。这是真的。感谢您的帮助:)
猜你喜欢
  • 1970-01-01
  • 2022-01-03
  • 2017-06-28
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-15
相关资源
最近更新 更多