2011-09-19 3 views
3

독자적인 사용자 정의 함수/디자인/등을 프로그래밍 할 때 자유로울 수있는 설문 조사 설계 프로그램을 사용하고 있습니다. 기본적으로 Prototype을 사용합니다. 나는 jQuery도 사용하고 싶다. 나는 고전적인 오류 "개체가이 속성 또는 메서드를 지원하지 않습니다"얻을jQuery 스크립트 src 선언에서 NoConflict가 호출 되더라도 JavaScript 오류가 발생합니다.

<script src="SurveyResource/jquery.js"> </script> 
<script> 
jQuery.noConflict(); 
</script> 

내가 페이지를로드 할 때 : 헤더에서 나는 jQuery를 선언과 같이, noConflict를 호출합니다. 또한 noConflict 스크립트를 제거하려고 시도했는데 오류가 여전히 선언과 함께 발생합니다. 특히

fire: function(element, eventName, memo) { 
    element = $(element); 
    if (element == document && document.createEvent && !element.dispatchEvent) 
    element = document.documentElement; 

    var event; 
    if (document.createEvent) { 
    event = document.createEvent("HTMLEvents"); 
    event.initEvent("dataavailable", true, true); 
    } else { 
    event = document.createEventObject(); 
    event.eventType = "ondataavailable"; 
    } 

    event.eventName = eventName; 
    event.memo = memo || { }; 

    if (document.createEvent) { 
    element.dispatchEvent(event); 
    } else { 
    element.fireEvent(event.eventType, event); 
    } 

    return Event.extend(event); 
} 

,이 라인에서 : element.fireEvent(event.eventType, event); 빠른 디버그 후, 나는 오류가이 기능에서 prototype.js에 발생 것을 발견했다. 또한 IE8을 사용하고 있습니다. 미안합니다. 아무도 내가이 두 아이를 함께 놀게 할 수 있습니까? 관련 질문에 답이없는 것 같습니다.

편집 : 여기 내 문제의 재현 생각의 바이올린입니다 : http://jsfiddle.net/vbzju/7/

프로토 타입 (즉 설문 조사 소프트웨어가 사용하는 기능) 프레임 워크로 선택,하지만 그때 헤더 스크립트로 jQuery를 추가 noConflict를 호출 한 다음 간단한 jQuery 함수를 사용해보십시오. 나는 던져진 오류가 내 컴퓨터에 들어오는 오류와 같다고 생각한다.

+0

문제의 피델을 게시 할 수 있습니까? 여기에 그것을 복사 할 수 없습니다 http://jsfiddle.net/vbzju/ –

+0

@ilia choly - 위의 편집 된 게시물을 참조하십시오 – rownage

답변

1

귀하의 바이올린에서 jquery가 두 번로드되었습니다. 다음은 클로저를 사용하여 jquery와 프로토 타입 모두에 $ 기호를 사용할 수있는 예입니다. http://jsfiddle.net/vbzju/14/ 또한 jquery를 먼저로드 한 다음 프로토 타입을로드해야합니다.

+0

jquery를 두 번로드 할 때 무슨 뜻인지 확실하지 않습니다 ... 나는 '

1

나는 또한 NoConflict가 Internet Explorer의 버그를 덜 보일 정도로 충분하지 않음을 발견했습니다. 파이썬, 사파리, 크롬 모두 잘 작동하기 때문에 navigator.userAgent 문자열의 버전 토큰을 확인하고 MSIE를 발견하면 dispatchEvent를 호출하지 않도록하십시오. 5631 번 라인의 prototype.js 함수에 대한 수정 사항이 저에게 효과적이었습니다. str과 n 지역 변수를 추가했습니다. MSIE가 아닌 브라우저의 경우 n은 null입니다.

function fire(element, eventName, memo, bubble) { 
element = $(element); 

if (Object.isUndefined(bubble)) 
    bubble = true; 

if (element == document && document.createEvent && !element.dispatchEvent) 
    element = document.documentElement; 

var event; 
if (document.createEvent) { 
    event = document.createEvent('HTMLEvents'); 
    event.initEvent('dataavailable', true, true); 
} else { 
    event = document.createEventObject(); 
    event.eventType = bubble ? 'ondataavailable' : 'onfilterchange'; 
} 

event.eventName = eventName; 
event.memo = memo || { }; 

var str=navigator.userAgent; 
var n=str.match(/MSIE/g); 

if ((document.createEvent) && (n == null)) 
    element.dispatchEvent(event); 
else 
    element.fireEvent(event.eventType, event); 

return Event.extend(event); 
} 
관련 문제