찾고있는 요소가 style="display:none;"
인 경우 $get('foo')
또는 document.getElementById('foo')
의 몇 가지 사례가 실패합니다. 이것은 일부 브라우저에서는 작동하지만 다른 브라우저에서는 작동하지 않는 것 같습니다. 구체적으로 IE9에서 호환성 모드로 제대로 작동하지만 호환 모드가 해제되어있는 경우 오류가 발생합니다.표시 할 때 getElementById()가 요소를 가져 오지 못함 : 없음
왜 이런 일이 일어날 수 있고 어떻게 해결할 수 있는지 설명 할 수 있습니까? 예를 들면 다음과 같습니다.
우리의 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>
는 HTML
생성 포함<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>
객체를 포함하는 래퍼 변수에 있지만 IE9에서 일부 브라우저 또는 호환 모드 초래한다 자바 스크립트 문을 다음과 jobAddressWrapper의 값은 null입니다. predefinedReplyWrapper의 값은 결코 null이 아닙니다. 이들의 유일한 차이점은 JobAddressCheckboxWrapper에 style="display:none;"
이 있다는 것입니다.
var jobAddressWrapper = $get('JobAddressCheckboxWrapper');
var predefinedReplyWrapper = $get('PredefinedReplyCheckBoxWrapper');
또는
var jobAddressWrapper = document.getElementById('JobAddressCheckboxWrapper');
var jobAddressWrapper = document.getElementById('PredefinedReplyCheckBoxWrapper');
스팬 래핑 요소와 HTML 패턴은 관련이 없다; 요소가 범위에 의해 랩핑되지 않지만 style="display:none;"
인 경우 여전히 참조가 될 수없는 다른 경우가 있습니다.
업데이트 (의견에 응답 등) :
- $ 얻을은 Sys.UI.DomElement 클래스의에서 getElementById 방법에 대한 바로 가기를 제공합니다. More info here
- 이러한 호출은 사용자 상호 작용에 대한 응답으로 onload 및 이라는 두 함수에서 수행됩니다. 두 경우 모두 문제가 발생합니다.
무엇이'$ get'입니까? 언제/어떻게 js의 라인이 실행됩니까? – Bergi
스티브, 네가 말하는 것이 정말로 이상하게 들린다. getElementById는 설정된 디스플레이 속성과 상관없이 현재 DOM 트리에있는 항목을 찾습니다. – shabunc
또한 가능한 한 자기 일관성을 유지하도록 질문을 편집하십시오.이 경우 현재 질문에 사용 된 용어를 설명하기 위해 다른 질문에 대한 링크를 제공하는 것이 최선의 해결책이 아닙니다. – shabunc