2012-11-12 5 views
2

위젯 팩토리의 jQuery 객체에 $ .extend를 사용하면 IE8은 새로 생성 된 객체에서 jQuery 컨텍스트를 잃어 버리는 것처럼 보입니다. 내가 설명해.

다음 코드는이 코드를 IE8를 제외한 모든 주요 브라우저 에서 잘 작동

$.widget("a07.Wooh", { options: { test: "Awesome" }, _testFunc: function() { // Perform some operations on the DOM using this.element jQuery Object this.element.after("<div class=\"stuff\">Some cool stuff</div>").next().hide(); }, _testFunc2: function() { //Copy the this.element object this.element2 = $.extend({}, this.element); //Perform some operations on the DOM using this.element2 jQuery Object this.element2.next().css('color', 'red').show(); }, _create: function() { this._testFunc(); this._testFunc2(); }, _init: function() {} }); 
위에서 언급 한 바와 같이

The working jsfiddle

IE9 +, 크롬, 파이어 폭스

에서 작동합니다. 기본적으로 그것은 반환하고 this.element2.next().css().show() 라인에 대한 오류 메시지 :

개체 (

는이 참조 속성/메소드는 jQuery를 방법 옆에이 속성 또는 메서드를 지원하지 않습니다), CSS() 같은 개체를 jQuery 함수로 래핑하면 IE8에서 this.element2가 jQuery 컨텍스트를 잃어 버린 것처럼 보입니다. this.element2 = $(this.element2);.

The IE8 compatible jsfiddle

그래서 질문은는, 무슨 일이 일어나고 있는가? IE8의 표준 동작입니까? 아니면 프로그래밍 방식으로 잘못 접근하고 있습니까?

+1

'this.element2 = $ .extend ({}, this.element)'- 여기에 당신의 의도는 무엇입니까? –

+0

당신의 바이올린은 IE8에서 작동합니다. –

+0

IE8에서 작동하는 경우 크롬 프레임이 설치되어 있거나 일종의 3 차원 호환성 모드에있을 수 있습니까? 그것은 내 로컬 테스트 IE8과 BrowserStack의 정확한 라인에서 같은 오류로 실패합니다. – EasyCo

답변

1

는 당신의 의도는 단순히 같은 요소를 포함하는 별도의 jQuery 객체를 생성하는 경우이 방법에 대해 :

this.element2 = $(this.element[0]); 
+0

또는'this.element2 = this.element.clone()' – charlietfl

+0

@charlietfl 요소의 사본을 생성하지만 특정 DOM 요소에 대한 참조가 없어지면 제대로 작동하지 않습니다. – EasyCo

+0

@EasyCo OK .. 나는 바이올린을 가까이에서 보았다. DOM에 참조 된 요소를 원하면 사본을 만드는 것이 무엇입니까? – charlietfl

관련 문제