调用全局变量

时间:2016-12-08 06:36:04

标签: javascript function undefined

这是一个问题测验。当你选择答案并点击"提交" 输出你的答案和你的分数。

问题是它没有阅读" var response"正确 - 它未定义。

我希望第二眼可以帮助我解决问题

感谢所有帮助:)

<p id="question">
<button type="button" class="start" onclick="test();">Start</button>
</p>

<p id="here"></p>

<script>

    function test() {
        document.getElementById("question").innerHTML =
          "<p>What color is the sky? <select id='list' onchange='score();'><option value='Not Sure' selected>Not Sure</option><option value='Blue'>Blue</option><option value='Red'>Red</option></select></p><button type='button' onclick='submit();'>submit</button>";
    }

    var total = 0;
    var response = document.getElementById('list').value;
    function score() {
        var response = document.getElementById('list').value;
        if (response === "Blue") {
            total++;
        }
    }

    function submit() {
        document.getElementById("here").innerHTML =
          "Your Answer:" + response + "<br />" + total + "/1";
    }

</script>

3 个答案:

答案 0 :(得分:2)

您目前有两个response变量,第一个是全局变量,并且分配给尚未存在的字段中的值,第二个变量是score()函数中的本地变量。

您需要在函数外部声明变量,但在<{1}}内设置其值:

&#13;
&#13;
score()
&#13;
function test() {
    document.getElementById("question").innerHTML =
      "<p>What color is the sky? <select id='list' onchange='score();'><option value='Not Sure' selected>Not Sure</option><option value='Blue'>Blue</option><option value='Red'>Red</option></select></p><button type='button' onclick='submit();'>submit</button>";
}

var total = 0;
var response = "Not sure";
function score() {
    // 'var' removed from following line:
    response = document.getElementById('list').value;
    if (response === "Blue") {
        total++;
    }
}

function submit() {
    document.getElementById("here").innerHTML =
      "Your Answer:" + response + "<br />" + total + "/1";
}
&#13;
&#13;
&#13;

(另外,不是您要问的问题,但是从select元素的<p id="question"> <button type="button" class="start" onclick="test();">Start</button> </p> <p id="here"></p>调用score()是没有意义的,因为如果用户更改了他们的思维从蓝色到红色来回几次,然后onchange变量增加了几次,他们可以获得像total这样的分数。最好做所有计算以响应提交点击按钮。)

答案 1 :(得分:0)

您可以删除&#34; var&#34;在下面的方法里面,它重新定义了函数范围内的全局变量。

function score() {
        response = document.getElementById('list').value;
        if (response === "Blue") {
            total++;
        }
    }

答案 2 :(得分:0)

问题似乎在于这一行

$(function () {

解析此行时,dom中不存在标识为var response = document.getElementById('list').value; 的元素。因此,您正在看list

您可以尝试在undefined函数

中分配此变量
test

DEMO