0

私の問題は、イベントを設定するたびに、一度しか発生しないことです。現在のコードでは、視聴者がクリックする div を 1 つのクラスに設定し、他の div を別のクラスに設定するだけです。これが私のJavaScriptです:

<script type="text/javascript">
var d = document;
function acc(id){
    var opn = d.getElementsByClass('opn')[0];
    var elem = d.getElementById(id);

    if(opn.id != id){
        opn.className = 'clo';
        elem.className = 'opn';
    }
}
</script>

そして、私のHTMLは次のとおりです。

<div id="a" class="opn" onclick="acc('a');">a</div>
<div id="b" class="clo" onclick="acc('b');">a</div>
<div id="c" class="clo" onclick="acc('c');">a</div>

div 要素の後続のクリックでコードを再度実行したいと思います。

4

2 に答える 2

1

クラスを元の状態にするにはelseステートメントが必要だと思うので、もう一度クリックすると新しいクラスに設定できます。

于 2012-07-05T11:17:46.120 に答える
0

あなたのコードはほぼ正しいように見えますが、(コメントで @lanzz によって識別されているように) 現在のopn要素を取得するために間違ったメソッドを呼び出していることを除けば、後のテストは失敗します。

これは、ブラウザーの JS コンソールでエラーを報告していたはずです。

いずれにせよ、適度な改善をお勧めします -id現在の要素の を渡す必要はありません。

次のようにハンドラーを記述してください。

onclick="acc(this)"

次のように関数を更新します。

function acc(elem) {
    var opn = d.getElementsByClassName('opn')[0];

    if (opn !== elem) {
        opn.className = 'clo';
        elem.className = 'opn';
    }
}

また、理論的opnには、イベントが発生するたびに更新する必要がないことにも注意してください。これは、DOM が更新されるたびに自動的に更新されるノードの「ライブ」リストである必要があります。

于 2012-07-05T12:30:53.437 に答える