2011-08-04 6 views
1

이 코드는 유지 보수 중이었던 코드에서 발견되었습니다 (예 : 7과 8). 생성자를 통해 진행하면서 모든 코드가 올바르게 실행되고 있음을 알 수있었습니다. 그러나 생성자가 반환 될 때 "개체가이 속성 또는 메서드를 지원하지 않습니다."오류가 발생합니다. WTF?IE7 및 IE8 명명 및 범위 지정 충돌

변수 중 하나 인 embedDialog에는 전역 범위가 있습니다 (전역 변수는 악의적 인 것으로 알고 있지만이 코드는 작성하지 않았습니다). 내가 embedDialog에게 기능 범위를 제공하는 경우

// Results in "Object does not support this property or method in ie8 and ie7 
embedDialog = new Dialog({ 
    id: "embedDialog", 
    width: 400, 
    height: 400, 
    message: "Check it out", 
    title: 'Cool dialog box' 
}); 

후 짜잔 그것은 작동 :

// Eliminate global scope and it works 
var embedDialog = new Dialog({ 
    id: "embedDialog", 
    width: 400, 
    height: 400, 
    message: "Check it out", 
    title: 'Cool dialog box' 
}); 

를 해결하는 다른 방법은 변수의 이름 이외의 다른 ID 속성 값을 변경하는 것입니다 다음과 같이하십시오 :

// Change "embedDialog" to "embedDialogBox" and voila it works 
embedDialog = new Dialog({ 
    id: "embedDialogBox", 
    width: 400, 
    height: 400, 
    message: "Check it out", 
    title: 'Cool dialog box' 
}); 

IE에는 어떤 문제가 있습니까? 누구든지 원래 코드가 IE 7/8을 깨뜨린 이유를 설명 할 수 있습니까?

+0

대화 상자는 어떻게 정의됩니까? –

+0

Dialog는 제공된 id로 DOM 요소를 추가 한 다음 jQuery UI 대화 상자를 첨부합니다. Dialog는 상자를 여는 데 사용되는 show를 포함하여 많은 함수를 반환합니다. – Adam

답변

2

"Dialog()"생성자 함수가 해당 "id"값 (전역 변수와 동일)으로 DOM 요소를 만드는 경우 IE는 해당 이름의 전역 심볼을 만듭니다 (변수와 충돌 함). DOM 요소를 참조합니다. 귀하의 코드는 아마 그것이 "대화"인스턴스가 될 것으로 기대합니다.

+0

Dialog는 id가 "embedDialog"인 DOM 요소를 만듭니다. IE에서 만든 DOM 요소를 가리키는 변수를 IE에서 만들지 못했습니다. 멋지다. – Adam

+0

크롬과 동일한 문제가 있다고 생각합니다. – Pointy

+0

아니요, Chrome에서도 정상적으로 작동합니다. – Adam

관련 문제