2008-09-25 10 views
27

Estoy usando el complemento jQuery AutoComplete en una página html donde también tengo un menú de acordeón que usa prototipos.jQuery & Prototype Conflict

Ambos funcionan perfectamente por separado, pero cuando traté de implementar ambos componentes en una sola página, recibí un error que no he podido comprender.

excepción no detectada: [Excepción ... "Componente devolvió el código de error: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMViewCSS.getComputedStyle]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" Lugar: "marco JS :: archivo: /// C:/Documents and Settings/ Administrador/escritorio/web/js/jquery-1.2.6.pack.js :: :: anónima línea 11" de datos: no]

descubrí el archivo que entra en conflicto con jQuery es 'effects.js', que es utilizado por el menú de acordeón. Traté de reemplazar este archivo con una versión más nueva, pero lo más nuevo parece romper el comportamiento del acordeón.

Supongo que el archivo 'effects.js' utilizado en el acordeón se modificó para obtener la salida de demostración del acordeón. También intenté usar los métodos de reemplazo que jQuery necesita para evitar conflictos con otras bibliotecas y eso no funcionó.

Obtuve la demostración de acordeón de stickmanlabs.com.

Y jQuery AutoComplete puede obtenerse en jQuery site.

¿Alguien más ha experimentado este problema?

+0

http://docs.jquery.com/Using_jQuery_with_Other_Libraries – giorgio79

Respuesta

117

hay dos soluciones posibles: Hubo un conflicto con una versión anterior de Scriptaculous y jQuery (Scriptaculous estaba tratando de extender el prototipo de Array nativo incorrectamente) - primero intente actualizar su copia de Scriptaculous.

Si eso no funciona, necesitará usar noConflict() (como se mencionó anteriormente). Sin embargo, hay una trampa. Puesto que usted está incluyendo un plugin que necesita para hacer lo incluye en un orden específico, por ejemplo:

<script src="jquery.js"></script> 
<script src="jquery.autocomplete.js"></script> 
<script> 
    jQuery.noConflict(); 
    jQuery(document).ready(function($){ 
    $("#example").autocomplete(options); 
    }); 
</script> 
<script src="prototype.js"></script> 
<script src="effects.js"></script> 
<script src="accordion.js"></script> 

Espero que esto ayude a aclarar la situación.

+38

¡No puede haber nada mejor que una respuesta del propio John Resig! – alex

8

Realmente no veo el motivo para usar ambas bibliotecas al mismo tiempo en este caso.

Puede usar Prototype (en realidad, Scriptaculous 'en realidad) Ajax.Autocompleter y zanja jQuery, o puede usar jQuery's Accordion y deshacerse de Prototype.

Con las dos bibliotecas a la vez no es realmente una buena idea, ya que:

  1. Pueden causar conflictos.
  2. Al incluirlos, obligará a los usuarios a descargarlos. Lo cual no es un enfoque amigable con el ancho de banda.
+0

De acuerdo. Nunca hay una buena razón para utilizar dos marcos de JavaScript como este. Incluso si prefiere el controlador X en jquery y el controlador Y en prototipo. Descarga extra y conflictos. – Espen

+0

* Nunca hay una buena razón para utilizar dos marcos de JavaScript como este. * Sí, sí lo hay. Por ejemplo, Drupal CMS se envía con jQuery, y muchos módulos aportados se expanden y se basan en esta base. Sin embargo, hay situaciones en las que desea agregar ese nifty gadget de JavaScript que no tiene un equivalente de jquery 1: 1. Además, de acuerdo con los datos de referencia de SunSpider, cada framework de JavaScript tiene sus propias fortalezas y debilidades con respecto al rendimiento ... ¡así que es genial saber que Drupal 7 finalmente se ajusta de forma predeterminada a todo el código jquery dentro de las funciones anónimas! –

Cuestiones relacionadas