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

私も範囲の問題だと思います。
yesCount() 関数と noCount() 関数では、変数 var_allAnswers を参照できません。マルセルの答えは正しいです。

JavaScript のブロック スコープについて学びたいと思うかもしれません。これについての記事は次のとおりです

于 2013-09-18T15:24:04.507 に答える
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 に答える