【问题标题】:javascript paramenter object reference unknownjavascript 参数对象引用未知
【发布时间】: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">&nbsp;
            </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 来解释为什么它会失败,那就太棒了。

【问题讨论】:

  • MyTwistie1SubRow1 是全局变量吗?它们在哪里定义?
  • @brso05 - 由于一些可怕的传统,这些变量将被自动定义,因为存在具有该名称 ID 的元素。 IMO,这是一种糟糕的编码方式。
  • @jfriend00 哦,好吧,我不知道...谢谢您的解释。
  • 它似乎运作良好jsfiddle.net/c6crs8fy
  • @mjorissen 它只是看起来那样。正确传递了对 SubRow1 的引用,并且无论单击的元素如何,该部分都被隐藏。但是,仅当我单击图像并且更改图像的脚本失败时,对图像的引用才能正确传递。

标签: javascript html


【解决方案1】:

我建议在onClick 事件调用中将MyTwistie1 替换为document.getElementById('MyTwistie1'),并将SubRow1 替换为document.getElementById('SubRow1')

【讨论】: