0

私がやろうとしているのは、クリックされたときに要素のクラスを ID で切り替えることだけです。

<script>

function selectLoad(id)
{
    if(document.getElementById(id).className == "load") {
        document.getElementById(id).className = "loadSelected";
    } else {
        document.getElementById(id).className = "load";
    }
}

</script>

<div class="load" id=" ... set by PHP per element ... " onclick="selectLoad(this)">

これはエラーを返します...

キャッチされていない TypeError: null のプロパティ 'className' を読み取れません

したがって、条件付きが気に入らないと思います。

私はJSが初めてで、助けが必要です。事前に感謝します。

4

3 に答える 3

5

You are passing the dom element itself (using this), not the id.

You should change the code to

function selectLoad(element)
{
    if (element.className == "load") {
        element.className = "loadSelected";
    } else {
        element.className = "load";
    }
}
于 2013-05-18T21:13:12.520 に答える
2

DOM に存在しない ID を渡していると思います。JavaScript が実行される前に dom がロードされましたか? スクリプトをページの一番下の HTML 終了タグの直前に移動します。

編集:エラーの下のコメントでの次の議論は次の行です:

<div class="load" id=" ... set by PHP per element ... " onclick="selectLoad(this)">

それは読むべきです

<div class="load" id=" ... set by PHP per element ... " onclick="selectLoad(this.id)">
于 2013-05-18T21:12:04.720 に答える
0

指定されたDOM要素があるかどうかを確認しないため、コードは安全ではありませんid

そのため、次のエラーが発生します。Cannot read property 'className' of null

if(document.getElementById(id)) {
    // ... do something and do not go further.
    return;
}

を呼び出すと、問題は通過thisしますselectLoad。この時点で、thisは DOM 要素であり、期待される文字列ではありません: ... set by PHP per element .... したがって、それに応じてコードを変更する必要があります。

于 2013-05-18T21:10:51.480 に答える