【发布时间】:2026-01-13 09:30:02
【问题描述】:
考虑以下代码(仅考虑相关代码):
JS
function ToggleRow(objTwistie, objRow) {
if (objRow.style.display == "none") {
objRow.style.display = "";
objTwistie.src = "../Images/SectionDown.gif";
} else {
objRow.style.display = "none";
objTwistie.src = "../Images/SectionUp.gif";
}
}
HTML
<form method="post" action="./WelcomePage.aspx?Tab=2" id="form1">
<table>
<tr>
<td>
<table>
<tr>
<td>
<img id="MyTwistie1" onclick="ToggleRow (MyTwistie1,SubRow1)" src="../Images/SectionDown.gif" alt="alt">
</td>
<td>
<div><span onclick="ToggleRow (MyTwistie1,SubRow1)" style="font-size:13px"><b>Header Row</b></span></div>
</td>
</tr>
</table>
</td>
</tr>
<tr id="SubRow1">
<td>
This is the section that gets hidden
</td>
</tr>
</table>
</form>
当我在img标签中调用onclick事件(点击页面上的图片)时,两个对象引用都正确传递给了ToggleRow函数,脚本运行正常。
但是,当调用 span onclick 事件中的事件时,只有对 objRow 的引用正确传递,并且对 MyTwistie1 的引用会生成一个错误,指出“'MyTwistie1' is undefined”。我意识到有更好的方法可以做到这一点,但我只需要了解为什么会失败。
编辑:使用 getElementById 的建议效果很好。如果有人可以通过自己传递 ID 来解释为什么它会失败,那就太棒了。
【问题讨论】:
-
MyTwistie1和SubRow1是全局变量吗?它们在哪里定义? -
@brso05 - 由于一些可怕的传统,这些变量将被自动定义,因为存在具有该名称 ID 的元素。 IMO,这是一种糟糕的编码方式。
-
@jfriend00 哦,好吧,我不知道...谢谢您的解释。
-
它似乎运作良好jsfiddle.net/c6crs8fy
-
@mjorissen 它只是看起来那样。正确传递了对 SubRow1 的引用,并且无论单击的元素如何,该部分都被隐藏。但是,仅当我单击图像并且更改图像的脚本失败时,对图像的引用才能正确传递。
标签: javascript html