2010-06-27 12 views
10

메가 드롭 다운 메뉴 시스템을위한 jQuery hoverIntent.js 스크립트를 사용하고 있습니다. Son Tonaka의 메가 드롭 다운 CSS에서 영감을받은 & jQuery sohtanaka.com/web-design/mega-drop-downs-w -css-jquery. 내 페이지에는 제 3 자 공급 업체가 삽입 한 prototype.js 스크립트가 들어 있습니다 (부동산 검색을로드하고 관리 컨텐츠를 이끌어내는 부동산 웹 사이트). 태그 바로 앞에로드됩니다. 내 메뉴 스크립트 및 jQuery 호출은 태그의 맨 위에로드됩니다. 아래에는 2 개의 링크가 포함되어 있습니다. 첫 번째 링크는 prototype.js에 대한 호출을 주석 처리했으며 메뉴는 정상적으로 작동합니다. 두 번째 링크는 prototype.js를 호출하고 드롭 다운이 작동하지 않습니다.jQuery/프로토 타입 충돌

  1. 작업 드롭 다운 : 나는 많은 변화를 시도했습니다

(작업 prototype.js에 포함) http://www.myreoforeclosures.com/_menutestfromcode2.html : http://www.myreoforeclosures.com/_menutestfromcode.html (prototype.js에이 주석)

  • 작동하지 드롭 다운 jQuery 웹 사이트에서 제안 된 jQuery noConflict() 결의안 중 일부는 나에게 있지만, 해결을 위해 해결할 수는 없다. 위의 링크를 CSS 및 HTML의 기본 사항으로 축소하여 드롭 다운을 테스트했습니다.

    웹 2.0/CSS/jQuery의 가파른 학습 곡선을 등반하고 있습니다. 이전에 이러한 도구를 사용하여 웹 사이트를 디자인 한 첫 번째 시도였습니다.

    jQuery와 프로토 타입을 함께 사용하면 도움이 될 것입니다. jQuery 스크립트를 제어 할 수 있기 때문에 jQuery에 대한 해결이 필요합니다. prototype.js를 제어 할 권한이 없습니다.

  • +1

    도움을 주셔서 감사합니다. 나는이 문제에 대한 해결책을 찾기 위해 많은 시간을 보냈다. 이것은 내가 "지식"에서 사람들이 더 많은 품질의 도움을받는 곳에서 발견 된 첫 번째 장소입니다. 다른 웹 사이트는 http://api.jquery.com/jQuery.noConflict와 동일한 정보를 다시 말해주는 것으로 보입니다./여기 및 http://docs.jquery.com/Using_jQuery_with_Other_Libraries를 참조하십시오. 또한 드롭 다운 메뉴의 작성자와 hoverIntent 플러그인 작성자에게 연락했지만 너무 바빠서 도움을받을 수 없다고합니다. 도움에 다시 한번 감사드립니다. Mike –

    +0

    Dunno는 왜 이런 생각을하지 않았지만 Firefox의 오류 콘솔에서 이것을 발견했습니다 : 오류 : 배열 길이가 잘못되었습니다 소스 파일 : http://www.myreoforeclosures.idxco.com/javascript/prototype.js Line : 30 –

    +0

    나는 그 오류가 반드시 jQuery와 충돌하지 않아도 프로토 타입을 사용하는 문제가 있음을 언급하는 것을 잊어 버렸다. 그것은 또한 프로토 타입 라이브러리 자체 (아마도 버그, 복사본에 문제가 있음)가있는 문제 일 수도 있지만 가능성은 적습니다. –

    답변

    0
    +0

    질문 : * "jQuery 웹 사이트에서 제안 된 jQuery noConflict() 해상도의 많은 변형을 시도했습니다."* – user113716

    +0

    아마도 제안한 것이 아닙니다. 그가 언급하지 않았으므로 확신 할 수 없으므로 내 대답은 여전히 ​​유효하다고 생각합니다. – XIII

    +1

    제 요점은 OP가'noConflict()'를 알고있어 제대로 작동하지 않기 때문에 아무 것도 쓸모가 없다는 것입니다. 그리고 당신은 실제로'noConflict()'해결책을 제안하지 않았습니다. 방금 사용하라고하셨습니다. – user113716

    1

    jQuery의 이전 버전을 사용하고 있습니다. 1.4.2 대신 1.3.2가 있습니다.

    차이가 있는지는 모르겠지만 최신 버전을 사용해보십시오.

    당신은 구글의 CDN에서 직접 링크 할 수 있습니다 :

    http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js

    +0

    작동하는 페이지 (prototype.js가 주석 처리 됨)와 작동하지 않는 페이지 (prototype.js가 링크 됨) 모두에서 1.4.2를 사용 중입니다. 불운. –

    +0

    @Mike - 글쎄, 나머지 jQuery는 오류없이 실행되고있는 것처럼 보입니다. 따라서 아마도 noConflict 문제가 아닙니다. 또한,'megaHoverOver'와'megaHoverOut' 콜백이 실행될 때 에러가 발생합니다. 그래서 hoverIntent 플러그인과는 아무런 관련이 없다는 느낌이 들었습니다. 확인하기 위해 hoverIntent 구성을 제거하여 jQuery로만 실행하면 제거 할 수 있습니까? – user113716

    +0

    @patrick - 두 버전 모두에 hoverIntent가 주석 처리되었습니다. http://www.myreoforeclosures.com/_emutestfromcode-noHI.html http://www.myreoforeclosures.com/_menutestfromcode2-noHI.html 제거하면 둘 다 삭제됩니다 (prototype.js가 주석 처리 된 것을 포함하여). -BTW는 도움을 감사합니다. –

    0

    메뉴는 두 URL에 나를 위해 작동하는 것 같다. (Firefox 3.6.4)

    편집 : 선호하는 브라우저가 NoScript가있는 Firefox이기 때문에 저들이 나를 위해 작동하는 것 같습니다. 프로토 타입 라이브러리가 다른 도메인에서 왔음을 알지 못했습니다. =/

    /headdesk

    +0

    두 개의 링크가 드롭 다운 메뉴를 생성 해 주셔서 감사합니다. 작품 : http://www.myreoforeclosures.com/_menutestfromcode.html prototype.js에 대한 호출이 없기 때문에이 버전은 드롭 다운 메뉴 http://www.myreoforeclosures.com/_emutestfromcode.html을 생성하지 않기 때문에 prototype.js와의 충돌 –

    +0

    Darn, 제 2의 도메인을 알지 못했습니다. 물론 NoScript를 사용할 때 둘 다 저에게 효과적이었습니다 .Sorry Mike, Chrome이나 IE에서 확인했는데, 실제로 작동하지 않습니다. 아이러니하게도 프로토 타입을 주석 처리했는지 확인하기 위해 두 페이지의 소스를 확인했지만 프로토 타입 라이브러리의 URL에 약간의 차이가 있음을 알지 못했습니다. –

    3

    내가 jQuery.noConflict()이 작동하지 않는 이유는 메뉴 코드가 jQuery를 기능을 참조 $를 계속 사용한다는 것을 생각한다. 모든 noConflict()jQuery에서 $ 글로벌 이름의 바인딩을 해제하는 것입니다.

    $이 "jQuery"를 의미하는 것으로 예상되는 코드가 있다면 jQuery을 대신 사용하도록 변경해야합니다.그렇지 않으면 Prototype $을 픽업 할 것입니다. 물론 이것은 매우 다른 것입니다.

    편집 — 오케이 마침내 내 페이지가로드됩니다. (내 네트워크에 문제가있는 것 같음) "$ j"를 일관되게 사용하고 있습니다. 따라서 메뉴 코드에서 $ 문제는 문제라고 생각하지 않지만, noConflict()이 마술이 아니기 때문에 여기에 의견을 남깁니다.

    다시 편집 — 프로토 타입 1.4.2를 사용해 보려는 Patrick의 제안과 함께 갈 것입니다.

    +0

    예 감사합니다. @ 패트릭! – Pointy

    +0

    뾰족한 - 죄송합니다, 당신의 대답을 업데이트 한 후 내 의견을 삭제했습니다. ; o) – user113716

    +0

    안녕하세요, @ 패트릭 : 페이지에서 발생하는 오류가 jQuery에서 무언가 (아마 배열)에서 "shift()"를 호출하면 프로토 타입으로 넘어 가서 네이티브 메소드의 오버라이드 (override) 문제가 무엇인지 알았습니다. 이것은 기본적으로 라이브러리의 "Prototype-proofing"에서 jQuery 1.3.2 버그입니다. – Pointy

    0

    해당 메뉴에서 프로토 타입을 사용하지 않으면 새 블록에서 (셀프 실행 익명 기능을 통해) $ 변수를 jQuery에 다시 정의 할 수 있습니다.

    (function ($) { 
        // do stuff as usual 
    })(jQuery); 
    
    +0

    메뉴는 jQuery 만 사용합니다. –

    1

    나는 정확히 같은 문제가있었습니다! JQ 1.6.2와 prototype.js를 'RangeError : 잘못된 배열 길이'와 함께 사용하고 있습니다.

    나는 Google의 CDN 프로토 타입 사본을 사용할 때까지 거의 포기하고 모든 것이 좋습니다. 문제가 된 버그가 지금 해결되었다고 생각합니다.