2012-08-10 10 views
7

Estoy trabajando en un sitio grande que tiene 2 complementos jquery en conflicto incluidos para hacer autocmpleto.conflicto entre dos complementos jquery con el mismo nombre de función

1) jquery.autocomplete.js (no forma parte de la interfaz de usuario jQuery) que hace:

$.fn.extend({ 
    autocomplete: function ... 

2) jquery.ui.autocomplete.js (a partir de la última biblioteca jQuery UI), que utiliza también la palabra clave autocompletar

$.widget("ui.autocomplete", { ... 

¿Hay una manera de especificar que estoy usando sólo la segunda, widget de jquery.ui al llamar

$("#tags").autocomplete ... 

sin cambiar los 2 archivos?

+0

jquery.autocomplete.js parece haber sido un proyecto separado en github, mientras que jquery.ui.autocomplete es el complemento jquery oficial. ¿No puedes usar 1 y quitar el otro tope? ¿La interfaz de usuario oficial autocompleta no hace todo lo que necesita? Simplemente no parece que estuvieran dispuestos a trabajar uno al lado del otro – Nope

+0

No puedo cambiar ni eliminar jquery.autocomplete.js, y creo que lo que tengo es una versión interna y no la versión de git a la que me refieres. una posible solución sería poder acceder a la segunda versión (ui) con algo como $ ("#tags") .ui.autocomplete –

+0

"No usar uno" no es realmente una solución para un conflicto de nombres en absoluto . Además, decir que dos bibliotecas no estaban pensadas para funcionar juntas, solo porque tienen el mismo nombre, no tiene sentido; no necesariamente están conscientes de la existencia del otro. – Triynko

Respuesta

9

Como la segunda autocompletar está utilizando el método $.Widget de registrarse en jQuery, será más fácil cambiar el comportamiento de la propia.

No podrá cargar ambos sin hacer algunos tipo de cambio en el objeto jQuery entre las dos cargas de scripts porque simplemente entrarán en conflicto (o sobrescribirán) entre sí.

me gustaría probar esto:

<script src="jquery.autocomplete.js"> </script> 
<script> 
    // rename the local copy of $.fn.autocomplete 
    $.fn.ourautocomplete = $.fn.autocomplete; 
    delete $.fn.autocomplete; 
</script> 
<script src="jquery-ui.autocomplete.js"> </script> 

que a su vez hacer:

$().autocomplete() 

utilizar la versión de jQuery UI, y

$().ourautocomplete() 

utilizar la versión local.

2

He intentado hacerlo con la función de pestañas de jQuery UI, debería funcionar igual para usted. Una función es técnicamente un objeto js, ​​por lo que simplemente podría cambiar su nombre:

$.fn.tabs2 = $.fn.tabs; 
    delete $.fn.tabs; 
    $("#tabz").tabs2({}); 

Espero que ayude!

Editar

Como sugirió Alnitak, también es necesario eliminar el nombre de la función anterior. Además, creo que se requiere .fn.

+0

buena idea, pero probé esto y parece que no funciona: http: // jsfiddle.net/turaaa/mbZgS/ –

+0

Como Alnitak sugirió, también debe eliminar el nombre de la función anterior. –

+0

@GilZumbrunnen y es importante que lo haga _antes de_ intente cargar la segunda función. – Alnitak

Cuestiones relacionadas