2011-09-11 3 views
0

이 코드는 다음과 같습니다.이 자바 스크립트 코드가 IE7-8에서 실패하는 이유는 무엇입니까?

window.addEvent('domready', function() { 

    var li_list = document.getElementById("topmenu").getElementsByTagName("li"); 

    for (var i=0; i<li_list.length; i++) { 

     li_list[i].onmouseover=function() { 
      this.className+=" hover"; 
     } 

     li_list[i].onmouseout=function() { 
      this.className=this.className.replace(new RegExp(" hover\\b"), ""); 
     } 
    } 
}) 

IE7-8에서는 실패합니다. document.getElementById (...)는 null이거나 객체가 아닙니다.

Firefox에서는 잘 작동합니다.

사이트의 주 메뉴 기능에 영향을 미칩니다. http://paraguasparados.com

고마워요.

+2

IE에는 'domready'이벤트가 없다고 생각합니다. 아마도 jQuery, MooTools, Prototype, ExtJS, ender, Dojo 등과 같은 라이브러리를 사용해야합니다. – tjameson

+0

"topmenu"로 지정된 요소가 대소 문자를 구별하는지 다시 한 번 확인하십시오. IE의 일부 버전은 ID 이름에서 대소 문자를 구별하지 않지만 최신 버전 그렇지 않습니다 ... – Sparky

+0

고마워요 @ 스픽,하지만 사건은 정확합니다. 다른 제안? – Memochipan

답변

4

IE에서는 domready가 실제로 준비되기 전에 실행이 가능합니다. Post.

그렇다면 코드가 실행될 때 document 개체를 사용할 수 없습니다. (따라서 IE 오류 메시지 "document.getElementById (...)는 null이거나 객체가 아닙니다.")

해결 방법 : IE에서 작동하는 domready와 동일한 기능을 제공하는 툴킷 (jQuery, yui 등)을 사용하십시오 및 기타 브라우저.

+1

좋은 이유는 왜 작동하지 않는지 알기 때문이며, 다른 방법으로 작동하게하는 것이 아니라는 의미입니다. –

+0

감사합니다 @ 래리, 당신이 제공 한 링크는 매우 유용했습니다. 이제 이해하고 문제가 해결되었습니다. – Memochipan

+0

@Memochipan을 확인해 주셔서 감사합니다, 당신은 7K 이상 나를 밀어 냈습니다! 나는 너에게 도움이되어 기쁘다. –

3

대신 사용해보십시오. 이것은 IE에서만 작동해야합니다.

+0

감사합니다 @ 윌리엄, IE에서 작동하지만 Firefox에서는 작동하지 않습니다. 이유를 설명해 주시겠습니까? – Memochipan

+1

IE는'addEventListener' 대신에'attachEvent'를 사용합니다. 원하는 경우 크로스 브라우저 DOM 준비 기능이 있습니다. [http://jsfiddle.net/CdKsx/](http://jsfiddle.net/CdKsx/). – Will

1

jquery를 사용하면 브라우저를 통해 작동하도록 다리 작업을 완료했습니다.

$(document).ready(function() { 
// do some stuff here 
}); 
+0

사실,하지만 mootools는 joomla와 같은 CMS를 사용하지 않고 jQuery 대신 많은 코드를 재 작성할 수없는 경우가 있습니다 – yitwail

관련 문제