0

この JavaScript コードは、コンテンツが異なる場合に div の背景を変更します。

function myfunction() {
    $a = document.getElementById('t').getElementsByTagName('div');
    var x = 0;
    while(x < $a.length) {
        var b = ($a[x].innerHTML);
        b.toString;
        alert(x + b[x]);
        if(b == 'PENDING SELECTING TEAM MEMBER' ||b == 'PENDING APPROVAL BY SCHEME MANAGER' ||b == 'PENDING SELECTING TEAM MEMBER' ||b == 'PENDING REVIEW TEAM MEMBER BY LEAD ASSESSOR' ||b == 'PENDING ACKNOWLEDGEMENT BY TA/LA' ||b == 'PENDING PREPARE AUDIT PLAN BY LA' ||b == 'PENDING REVIEW AUDIT PLAN BY AO' ||b == 'PENDING ACCEPT LA BY LAB' ||b == 'PENDING VERIFY REASON BY AO' ||b == 'PENDING CONDUCT ASSESSMENT' || b == 'PENDING CORRECTIVE ACTION BY CAB' || b == 'PENDING REVIEW BY AO' || b == 'PENDING CORRECTIVE ACTION APPROVAL BY SCHEME MANAGER' ||b == 'PENDING APPROVAL BY DOA' ){
            document.getElementById('status'+x).style.background="maroon";
            alert(x + b);
        }
        x++;

    }
}

ifステートメントが失敗しているため、機能しません。

誰かが何が悪いのかを理解するのを手伝ってくれますか?

4

3 に答える 3

2

ちょうどメモとして、あるb.toString;べきですb.toString();

個人的には二重引用符を使用することを好みますが、それは二重引用符を厳密に型指定するために使用され、文字と文字列に違いがあるためです。

他の人がそれを言うのを見ましたが、強調するために:「var」キーワードを持たない関数内の変数はそれらをグローバルにします。つまり、それらはアクセス可能であり、プログラムのどのスコープでも変更可能です。

次の JavaScript コードを使用してみてください: JSFiddle

背景色の設定方法を変更しました。

于 2012-11-01T23:58:58.037 に答える
0

_.containsfromの使用を検討してくださいunderscore.js。これにより、if複雑さが少し軽減されます。代わりに、次のようになります。

var collection = [
    'PENDING SELECTING TEAM MEMBER', 
    'PENDING APPROVAL BY SCHEME MANAGER', 
    'PENDING SELECTING TEAM MEMBER', 
    'PENDING REVIEW TEAM MEMBER BY LEAD ASSESSOR', 
    'PENDING ACKNOWLEDGEMENT BY TA/LA', 
    'PENDING PREPARE AUDIT PLAN BY LA', 
    'PENDING REVIEW AUDIT PLAN BY AO', 
    'PENDING ACCEPT LA BY LAB', 
    'PENDING VERIFY REASON BY AO', 
    'PENDING CONDUCT ASSESSMENT', 
    'PENDING CORRECTIVE ACTION BY CAB', 
    'PENDING REVIEW BY AO', 
    'PENDING CORRECTIVE ACTION APPROVAL BY SCHEME MANAGER', 
    'PENDING APPROVAL BY DOA'];

if(_.contains(collection, b)) {
    alert("this condition is true!");
    //...
}

アラートが発生する場合は、if ステートメント内の問題です。そうでない場合は、条件が満たされていないため、おそらく HTML の先頭と末尾の空白を調べることから始めます。

于 2012-11-02T00:23:33.703 に答える
0

if ステートメントを単純化することで「テスト」できます (これは普遍的なデバッグ手法です)。

var b = 'PENDING SELECTING TEAM MEMBER';

if (b == 'PENDING SELECTING TEAM MEMBER' || b == 'PENDING APPROVAL BY SCHEME MANAGER' || b == 'PENDING SELECTING TEAM MEMBER' || b == 'PENDING REVIEW TEAM MEMBER BY LEAD ASSESSOR' || b == 'PENDING ACKNOWLEDGEMENT BY TA/LA' || b == 'PENDING PREPARE AUDIT PLAN BY LA' || b == 'PENDING REVIEW AUDIT PLAN BY AO' || b == 'PENDING ACCEPT LA BY LAB' || b == 'PENDING VERIFY REASON BY AO' || b == 'PENDING CONDUCT ASSESSMENT' || b == 'PENDING CORRECTIVE ACTION BY CAB' || b == 'PENDING REVIEW BY AO' || b == 'PENDING CORRECTIVE ACTION APPROVAL BY SCHEME MANAGER' || b == 'PENDING APPROVAL BY DOA')
{
    alert("Working");
}
于 2012-11-02T00:49:28.380 に答える