2009-10-15 6 views
0

동적으로 생성 된 요소가 new Element('div')인데 다음으로 페이드되고 이동되고 페이드 아웃됩니다. 모든 브라우저에서 내 코드는 예상대로 작동하지만 IE를 제외한 모든 브라우저가 작동합니다.IE8의 원형에 대해 " '정의되지 않음'이 null이거나 객체가 아닙니다.

Internet Explorer는 Prototype's Lighthouse에 정확하게 설명 된대로 'undefined' is null or not an object이라고 불평합니다.

new Message('Your contact information has been saved');

내 메시지 클래스의 소스 것은 this gist에서 확인할 수있다, 나는 쓰기 오류를 얻으려면.

+1

최신 프로토 타입을 사용하고 있습니까? 1.6.0은 IE8에 대한 적절한 지원을하지 못합니다. 특히 새로운 요소를 만들 때 더욱 그렇습니다. – Charles

+0

Google에서 호스팅 한 Prototype 1.6.1을 사용하고 있습니다. – arbales

+0

전역 변수? 나는 당혹 스럽다. 나는 var로 선언 된 변수가 전역 변수라고 생각했다. 그거 끔찍해. 도대체 왜 글로벌 범위가 기본 범위입니까? – arbales

답변

2

"개체가 아닌 것으로 정의되지 않았습니다."는 매우 넓은 범위의 상황에서 생성 될 수있는 매우 기본적인 오류 메시지입니다 (JScript는 null 포인터 예외와 동등한 효과가 있습니다). 따라서 위에서 언급 한 것과 같은 오류가 발생할 가능성은 없습니다.

그래도 오류가 발생하지 않습니다. 나는 "잘못된 인수"를 얻었는데, 그 원인은 다음과 같습니다 :

new Effect.Move(_div, {sync: true, x: '50%', y: 35, mode: 'relative' }) 

정상적인 정수 픽셀 값으로 %를 변경하면 정상적으로 작동합니다. x은 CSS 측정이 아닌 정수 값만 허용하는 것으로 documented입니다. '%'는 다른 브라우저에서도 작동하지 않습니다 (0으로 동작). 나는이 기능을 만들었다 고 생각합니다!

Fabien이 언급했듯이 var 문을 삽입해야합니다. 그렇지 않으면 전역 변수에 낙서가 걸리고 메시지 중 두 개를 만들려고하면 메시지가 폭파됩니다. 덧붙여 말하자면, IE가 혼란 스럽기 때문에, 배열 리터럴에 (꼬리표가있는 행 때문에) 후행 ,을 남기지 않도록주의하십시오.

+0

나는 그의 문제가 새로운 Effect.Fade (_div, {sync : true}), 다음 쉼표 때문에 추가 쉼표와 관련이 있다고 생각합니다. IE에서 던진 오류를 정말 좋아합니다 ... –

+0

나쁜 점은 내 모든 의지를하지 않는다는 것입니다. 진심으로 그래도 지구의 기본 범위가 나를 슬프게합니다. – arbales

+0

예, default-global은 JavaScript 언어에서의 심각한 디자인 오류이며, 유일한 오류는 아닙니다. :-( – bobince

관련 문제