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对象,当您在其上定义函数或变量时不需要这样做;您可以像独立使用它一样使用它。但实际上所有全局变量都在 window 对象上。这可能是由于var在创建变量时意外省略了关键字造成的。例如:

x = 5;

假设x以前没有定义变量。由于x不是关键字创建的var,所以它放在window对象上。我们可以在控制台中查看:

>> window.x;

 : 5

这可能会导致棘手的情况,因为它可能与x在外部范围中声明的另一个变量发生冲突。这就是为什么用 定义总是很重要的原因var。不应该有理由不这样做。

于 2012-12-12T00:19:19.617 回答