1

私はjavascript関数を持っていますが、それを使用すると機能しません。HTMLの関数なしで同じコードを使用すると、機能します。

<script type="text/javascript">
function jon(str) {
    id = 'j'+str;
    getElementById(id).setAttribute('class', '');
}
function jover(str) {
    id = 'j'+str;
    getElementById(id).setAttribute('class', 'hide');
}
</script>

<form id="lijst" action="" method="POST" onSubmit="return formOK();">
    <table>
        <tr onMouseOver="getElementById('jtitle').setAttribute('class', '');" onMouseOut="getElementById('jtitle').setAttribute('class', 'hide');">
            <th>* Title</th>
            <td><input type="text" name="title" /></td>
            <td id="jtitle" class="hide">Vul een film of serie titel in.</td>
        </tr>
        <tr onMouseOver="jon('type');" onMouseOut="jover('type');">
            <th>* Type</th>
            <td><select name="type"><option value="film">Film</option><option value="serie">Serie</option></select></td>
            <td id="jtype" class="hide"></td>
        </tr>

タイトルは機能しますが、タイプは機能しません。コンソールには、getElementById()が定義されていないと表示されます。関数を入れvar id = ''てみましたが、うまくいきません。

では、どうすればそれを修正できますか?

4

1 に答える 1

3

プレフィックスが必要ですdocument.

document.getElementById(id).setAttribute(...);

getElementByIdメソッドはオブジェクトで定義されますdocument。任意のオブジェクトでメソッドを呼び出すには、それが定義されているオブジェクトを使用し、その後にドット.とメソッド名を続ける必要があります。例えば:

document.getElementById()
   |    ^       |
   |            |
   |            |
[object]    [method]

唯一の例外はwindowオブジェクトの場合であり、関数または変数を定義するときにそれは必要ありません。自立しているかのように使用できます。しかし実際には、特にすべてのグローバル変数はウィンドウオブジェクト上にあります。これは、変数を作成するときに誤ってvarキーワードを省略したことが原因である可能性があります。例えば:

x = 5;

x変数が以前に定義されていないと仮定します。キーワードで作成されてxないため、オブジェクトに配置されます。コンソールで確認できます。varwindow

>> window.x;

 : 5

xこれは、外部スコープで宣言された別の変数と競合する可能性があるという点で、スティッキーな状況につながる可能性があります。そのため、で定義することが常に重要varです。そうしない理由はないはずです。

于 2012-12-12T00:19:19.617 に答える