0

我无法让我的代码计算“是”一词出现在变量中的次数。如果我用字符串“YesYesYes”替换变量,它会起作用。结果是 3。我想做同样的事情,但是从一个变量代替。

这是我的代码。

function getAllAnswers() {
    var var_allAnswers = document.querySelector('input[name="Q1"]:checked').value + document.querySelector('input[name="Q2"]:checked').value + document.querySelector('input[name="Q3"]:checked').value + document.querySelector('input[name="Q4"]:checked').value + document.querySelector('input[name="Q5"]:checked').value + document.querySelector('input[name="Q6"]:checked').value + document.querySelector('input[name="Q7"]:checked').value + document.querySelector('input[name="Q8"]:checked').value + document.querySelector('input[name="Q9"]:checked').value + document.querySelector('input[name="Q10"]:checked').value + document.querySelector('input[name="Q11"]:checked').value + document.querySelector('input[name="Q12"]:checked').value + document.querySelector('input[name="Q13"]:checked').value + document.querySelector('input[name="Q14"]:checked').value + document.querySelector('input[name="Q15"]:checked').value + document.querySelector('input[name="Q16"]:checked').value + document.querySelector('input[name="Q17"]:checked').value + document.querySelector('input[name="Q18"]:checked').value + document.querySelector('input[name="Q19"]:checked').value + document.querySelector('input[name="Q20"]:checked').value;
    document.getElementById("AllAnswers").innerHTML = var_allAnswers;
}

function yesCount() {
    var var_yesCount = var_allAnswers.split("Yes").length - 1;
    document.getElementById("YesCount").innerHTML = var_yesCount;
}

function noCount() {
    var var_noCount = var_allAnswers.split("No").length - 1;
    document.getElementById("NoCount").innerHTML = var_noCount;
}

这是我的标记。

    <button onclick="yesCount()">Yes Count</button><br/>
    Yes Count: <p id="YesCount"></p><br/><br/>
    <button onclick="noCount()">No Count</button><br/>
    No Count: <p id="NoCount"></p><br/><br/>
    All Answers: <p id="AllAnswers"></p><br/><br/>

有没有人有任何想法?

4

4 回答 4

0

and函数中var_allAnswers调用的变量超出范围,这意味着您的函数无法访问它。一个有点骇人听闻的修复:yesCountnoCount

(function()
{
    var var_allAnswers;

    function getAllAnswers() {
        var_allAnswers = document.querySelector('input[name="Q1"]:checked').value + document.querySelector('input[name="Q2"]:checked').value + document.querySelector('input[name="Q3"]:checked').value + document.querySelector('input[name="Q4"]:checked').value + document.querySelector('input[name="Q5"]:checked').value + document.querySelector('input[name="Q6"]:checked').value + document.querySelector('input[name="Q7"]:checked').value + document.querySelector('input[name="Q8"]:checked').value + document.querySelector('input[name="Q9"]:checked').value + document.querySelector('input[name="Q10"]:checked').value + document.querySelector('input[name="Q11"]:checked').value + document.querySelector('input[name="Q12"]:checked').value + document.querySelector('input[name="Q13"]:checked').value + document.querySelector('input[name="Q14"]:checked').value + document.querySelector('input[name="Q15"]:checked').value + document.querySelector('input[name="Q16"]:checked').value + document.querySelector('input[name="Q17"]:checked').value + document.querySelector('input[name="Q18"]:checked').value + document.querySelector('input[name="Q19"]:checked').value + document.querySelector('input[name="Q20"]:checked').value;
        document.getElementById("AllAnswers").innerHTML = var_allAnswers;
    }

    function yesCount() {
        var var_yesCount = var_allAnswers.split("Yes").length - 1;
        document.getElementById("YesCount").innerHTML = var_yesCount;
    }

    function noCount() {
        var var_noCount = var_allAnswers.split("No").length - 1;
        document.getElementById("NoCount").innerHTML = var_noCount;
    }
})();

尽管您确实应该var_allAnswers在函数调用中将变量作为参数传递。

于 2013-09-18T15:07:00.623 回答
0

var_allAnswers您在其中声明的局部变量getAllAnswers()不能在另一个函数中使用,而是应该将您的变量声明为Global或创建一个返回要处理的变量的函数。前任:

var var_allAnswers;

function getAllAnswers() {
    var_allAnswers = document.querySelector('...
    document.getElementById("AllAnswers").innerHTML = var_allAnswers;
}

getAllAnswers();
于 2013-09-18T15:08:29.350 回答
0

看来您在这里遇到了范围问题。var 定义了一个仅在包含它的块中可用的变量 { } 因此,当您退出 getAllAnswers() 时,您的变量 var_allAnswers 将被丢弃。

您需要重新初始化它才能重用它

function yesCount() {
    var_allAnswers = document.querySelector('input[name="Q1"]:checked').value
    var var_yesCount = var_allAnswers.split("Yes").length - 1 ;
    document.getElementById("YesCount").innerHTML = var_yesCount;
}
于 2013-09-18T15:08:33.967 回答
0

我也认为这是范围的问题。
在 yesCount() 和 noCount() 函数中,变量 var_allAnswers 不能被引用。马塞尔的回答是对的。

您可能想了解 javascript 中的块作用域。这是一篇关于此的文章:
http ://danbeam.org/blog/2011/05/23/turns-out-there-is-block-scope-in​​-javascript-kinda/

于 2013-09-18T15:24:04.507 回答