2010-06-27 13 views
10

Estoy usando un script jQuery hoverIntent.js para un mega sistema de menú desplegable inspirado en el mega desplegable de Son Tonaka w/CSS & jQuery sohtanaka.com/web-design/mega-drop-downs-w -css-jquery. Mi página incluye un script prototype.js insertado por un proveedor de terceros (este es un sitio web de bienes raíces que carga la búsqueda de propiedades y el contenido de administración de clientes potenciales). Se carga justo antes de la etiqueta. Mi script de menú y las llamadas jQuery se cargan en la parte superior de la etiqueta. A continuación he incluido 2 enlaces. El primer enlace he comentado la llamada al prototype.js y el menú funciona bien. El segundo enlace tiene la llamada al prototype.js y el menú desplegable no funciona.conflicto jQuery/prototype

  1. Trabajo desplegable: http://www.myreoforeclosures.com/_menutestfromcode.html (prototype.js comentadas)

  2. caída no dirigiéndose hacia abajo: http://www.myreoforeclosures.com/_menutestfromcode2.html (con prototype.js de trabajo)

que he intentado muchas variaciones de las resoluciones de jQuery noConflict() sugeridas en el sitio web de jQuery, pero, por mi vida, no puedo resolver el conflicto. He reducido los enlaces anteriores a solo los conceptos básicos de CSS y HTML para probar el menú desplegable.

Tenga en cuenta que estoy escalando una curva de aprendizaje empinada con Web 2.0/CSS/jQuery ya que este es mi primer intento de diseñar un sitio web utilizando estas herramientas (frente a sitios web basados ​​en tablas anteriormente).

Cualquier ayuda para hacer que jQuery y el prototipo trabajen juntos sería muy apreciado. Solo tengo control de la secuencia de comandos de jQuery, por lo que cualquier resolución debe hacerse en jQuery. No tengo ningún control sobre el prototype.js.

+1

Gracias por ayudarnos. Pasé muchas horas buscando una solución a este problema. Este es el primer lugar en el que he encontrado donde obtengo ayuda de calidad por parte de las personas más en "saber" que yo. Otros sitios web parecen repetir la misma información que se encuentra aquí: http://api.jquery.com/jQuery.noConflict/y aquí: http://docs.jquery.com/Using_jQuery_with_Other_Libraries. También me puse en contacto con el creador del menú desplegable y el creador del plugin hoverIntent, pero ambos dicen que están demasiado ocupados para ayudar. Gracias de nuevo por la ayuda. Mike –

+0

No sé por qué no pensé en esto antes, pero encontré esto en la consola de error de Firefox: Error: longitud de matriz no válida Archivo de origen: http://www.myreoforeclosures.idxco.com/javascript/prototype.js Línea : 30 –

+0

Olvidé mencionar que ese error indica un problema con algo que está usando un prototipo, no necesariamente un conflicto con jQuery. También puede ser un problema con la biblioteca prototipo en sí misma (tal vez un error, problema con su copia), aunque es menos probable. –

Respuesta

0
+0

De la pregunta: * "He intentado muchas variaciones de las resoluciones de jQuery noConflict() sugeridas en el sitio web de jQuery" * – user113716

+0

Bueno, quizás no el que sugerí. Como él no lo menciona, no podemos estar seguros, así que creo que mi respuesta sigue siendo válida. – XIII

+1

Mi punto es que no ha agregado nada útil ya que el OP conoce 'noConflict()' y no puede hacer que funcione. Y en realidad no sugirió una resolución 'noConflict()'. Usted acaba de decir que lo use. – user113716

1

Veo que está utilizando una versión anterior de jQuery. Tienes 1.3.2 en lugar de 1.4.2.

No estoy seguro si marcaría la diferencia, pero quizás pruebe la última versión.

que puede enlazar directamente desde CDN de Google:

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

+0

Ahora estoy usando 1.4.2 tanto en la página que funciona (prototype.js comentó) como en la página que no funciona (prototype.js linked). Sin suerte. –

+0

@Mike - Bueno, el resto de su jQuery parece estar ejecutándose sin errores, por lo que probablemente no sea específicamente un problema sin conflicto. Además, el error se produce cuando se ejecutan las devoluciones de llamada 'megaHoverOver' y' megaHoverOut'. Así que tengo la sensación de que no tiene nada que ver con el plugin hoverIntent. Solo para verificar, ¿podrías eliminar la configuración de hoverIntent para que se ejecute solo con jQuery para que podamos eliminar eso? – user113716

+0

@patrick - Comentada hoverIntent en ambas versiones: http://www.myreoforeclosures.com/_menutestfromcode-noHI.html http://www.myreoforeclosures.com/_menutestfromcode2-noHI.html eliminar los mata a los dos, incluido el que w/prototype.js comentó. -BTW aprecia la ayuda. –

0

El menú parece funcionar para mí en ambas direcciones URL. (Firefox 3.6.4)

Editar: Parecen funcionar para mí, porque mi navegador preferido es Firefox con NoScript. No noté que la biblioteca de prototipos venía de un dominio diferente. =/

/headdesk

+0

gracias por mirar esto. ¿Ambos enlaces producen un menú desplegable? Sé esto funciona: http://www.myreoforeclosures.com/_menutestfromcode.html porque no hay una llamada a prototype.js pero esta versión no produce un menú desplegable http://www.myreoforeclosures.com/_menutestfromcode.html debido a un conflicto con el prototipo.js. –

+0

Maldición, no noté el segundo dominio. Por supuesto, ambos funcionaron para mí, ya que uso NoScript. Lo siento, Mike, si lo hubiera comprobado en Chrome o IE, habría notado que uno es de hecho, no funciona. Lo irónico es que incluso verifiqué el origen de ambas páginas, para asegurarme de que había un prototipo comentado, pero no noté la pequeña diferencia en la URL de esa biblioteca de prototipos. –

3

Sospecho que la razón jQuery.noConflict() no funciona es que el código de menú continúa utilizando $ para referirse a la funcionalidad de jQuery. Todo lo que hace noConflict() es desvincular el nombre global $ del jQuery.

Si tiene un código que espera que $ signifique "jQuery", entonces debe cambiarse para usar jQuery.De lo contrario, recogerá el prototipo $ que es, por supuesto, algo muy diferente.

edición — bien por fin llegué a su página se cargue (creo que mi red estaba teniendo problemas), por lo que veo que está utilizando "$ j" bastante consistente. Por lo tanto, no creo que el problema $ en el código del menú sea un problema, pero dejaré aquí el comentario porque sigue siendo cierto que noConflict() no es mágico.

edit again — Me gustaría ir con la sugerencia de Patrick para probar Prototype 1.4.2.

+0

Sí, lo veo ahora ; gracias @patrick! – Pointy

+0

puntiaguda: lo siento, borré mi comentario después de que hayas actualizado tu respuesta. ; o) – user113716

+0

Hola @patrick: ¿notaste que el error que está sucediendo en la página parece ocurrir cuando algo en jQuery llama a "shift()" en algo (probablemente una matriz), y luego eso causa un salto en un prototipo anular un método nativo? Apuesto a que ese es el problema; es básicamente un error jQuery 1.3.2 en la "prueba de prototipos" de la biblioteca. – Pointy

0

Si ese menú no usa prototipo, puede redefinir la variable $ a jQuery en un nuevo bloque (a través de una función anónima autoejecutable).

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

el menú solo usa jQuery –

1

¡Tenía exactamente el mismo problema! Estoy usando Jq 1.6.2 y un prototype.js, con el 'RangeError: Invalid array length'.

Casi renuncio a él hasta que utilicé la copia de prototipo del CDN de Google, y todo está bien. Supongo que el error que fue el problema ahora ha sido resuelto.