Javascript - 从变量计算特定字符串的实例数

时间:2013-09-18 14:57:59

标签: javascript

我无法让我的代码计算单词“是”'的次数。出现在变量中。如果我用字符串' 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 个答案:

答案 0 :(得分:0)

var_allAnswersyesCount函数中调用的变量noCount超出了范围,这意味着您的函数无法访问它。有点hackish修复:

(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变量作为参数。

答案 1 :(得分:0)

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

var var_allAnswers;

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

getAllAnswers();

答案 2 :(得分:0)

这里看起来你有一个范围问题。 var定义了一个varable,它仅在包含它的块中可用{} 因此,当您退出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;
}

答案 3 :(得分:0)

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

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