Javascript 显示时getElementById()无法获取元素:无

Javascript 显示时getElementById()无法获取元素:无,javascript,asp.net-ajax,Javascript,Asp.net Ajax,当正在查找的元素具有style=“display:none;”“时,有几种情况下$get('foo')或document.getElementById('foo')失败。这似乎在某些浏览器中有效,但在其他浏览器中无效;具体来说,下面所示的情况在具有兼容模式的IE9中运行良好,但在关闭兼容模式时失败 有人能解释为什么会发生这种情况,以及我们如何解决它吗?下面是一个例子 我们的ASPX页面包含 <span id="JobAddressCheckBoxWrapper" style="displa

当正在查找的元素具有
style=“display:none;”“
时,有几种情况下
$get('foo')
document.getElementById('foo')
失败。这似乎在某些浏览器中有效,但在其他浏览器中无效;具体来说,下面所示的情况在具有兼容模式的IE9中运行良好,但在关闭兼容模式时失败

有人能解释为什么会发生这种情况,以及我们如何解决它吗?下面是一个例子

我们的ASPX页面包含

<span id="JobAddressCheckBoxWrapper" style="display: none;">
  <asp:CheckBox ID="JobAddressCheckBox" CssClass="DefaultTextCell" runat="server" Text="__Job address"
    Style="margin-right: 2em;" onclick="ShowJobAddress();" />
</span>
<span id="PredefinedReplyCheckBoxWrapper">
  <asp:CheckBox ID="PredefinedReplyCheckBox" CssClass="DefaultTextCell" runat="server"
    Text="__Pre-defined reply" onclick="ShowReplies()" AutoPostBack="false" Style="margin-right: 2em;" />
</span>

元素被span包装的HTML模式是不相关的;还有一些情况下,元素没有用跨距包装,但如果它们具有
style=“display:none;”
,则仍然不能被引用

更新(回应评论等):

  • $get提供了的getElementById方法的快捷方式 Sys.UI.doElement类
  • 这些调用是在从onload和onload调用的函数中进行的 响应用户交互。这两种情况都会出现问题

  • 这确实是一个奇怪的问题,所以在做任何其他事情之前,请检查代码是否有拼写错误和范围混乱! 而且这真的很老了,所以希望你现在没有这个问题

    然而,当你试图克服这些问题,或者更好地找到问题的原因时,你可能会找到一个解决方案,这通常会有所帮助。使用jQuery selection
    $(“#AnyID”)
    ,如果不熟悉css语法,请注意


    浏览器在尝试更加兼容方面已经走过了漫长的道路,还有很长的路要走。早些时候,我经常使用jQuery来推断为什么一个普通的JS指令在一个浏览器中无法正常工作,而在另一个浏览器中却可以正常工作。通常我会发现我对JS理解不够,而jQuery已经知道我需要学习什么=)

    这个答案可能与问题的每个实例都不相关,但我在使用ASP.NET母版页时遇到了它

    使用ContentPlaceholder id=“MainContent”,我的div id=“IdValidationErrorDiv”的呈现id实际上是“MainContent\u IdValidationErrorDiv”


    使用此id调用getElementById成功。

    什么是
    $get
    ?这几行js是何时/如何执行的?史蒂夫,你说的听起来真的很奇怪。getElementById查找当前DOM树中存在的任何内容,无论设置了什么显示属性。此外,请编辑问题,使其尽可能自一致,在这种情况下,仅仅为了解释当前问题中使用的术语而提供指向另一个问题的链接并不是最好的解决方案。
    document.getElementById()
    对于我在这里尝试的所有版本的IE中隐藏的HTML,我似乎都很满意:。一定还有什么问题让您感到困惑,因为我认为
    document.getElementById()
    没有问题。谢谢,不再有问题了。我忘了是怎么回事,但我们找到了一些解决办法。
    <span style="display: none;" id="JobAddressCheckBoxWrapper">
      <span style="margin-right: 2em;" class="DefaultTextCell">
        <input id="JobAddressCheckBox" onclick="ShowJobAddress();" name="JobAddressCheckBox" type="checkbox">
        <label for="JobAddressCheckBox">Job address</label>
      </span>
    </span>
    <span id="PredefinedReplyCheckBoxWrapper">
      <span style="margin-right: 2em;" class="DefaultTextCell">
        <input id="PredefinedReplyCheckBox" onclick="ShowReplies();" name="PredefinedReplyCheckBox" type="checkbox">
        <label for="PredefinedReplyCheckBox">Predefined reply</label>
      </span>
    </span>
    
    var jobAddressWrapper = $get('JobAddressCheckboxWrapper');
    var predefinedReplyWrapper = $get('PredefinedReplyCheckBoxWrapper');
    
    var jobAddressWrapper = document.getElementById('JobAddressCheckboxWrapper');
    var jobAddressWrapper = document.getElementById('PredefinedReplyCheckBoxWrapper');