jQuery e Prototype Conflict

Sto utilizzando il plug-in AutoComplet jQuery in una pagina html in cui ho anche un menu a fisarmonica che utilizza il prototipo.

Entrambi funzionano perfettamente separatamente, ma quando ho provato ad implementare entrambi i componenti in una singola pagina ho ricevuto un errore che non ero stato in grado di capire.

eccezione non rilevata: [Eccezione … “Componente restituito codice di errore: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMViewCSS.getComputedStyle]” nsresult: “0x80004005 (NS_ERROR_FAILURE)” percorso: “JS frame :: file: /// C: / Documents and Settings /Administrator/Desktop/website/js/jquery-1.2.6.pack.js :: anonymous :: line 11 “data: no]

Ho scoperto che il file in conflitto con jQuery è “effects.js” che viene utilizzato dal menu della fisarmonica. Ho provato a sostituire questo file con una versione più recente, ma il più recente sembra rompere il comportamento della fisarmonica.

La mia ipotesi è che il file “effects.js” usato nella fisarmonica sia stato modificato per ottenere l’output della demo della fisarmonica. Ho anche provato ad usare i metodi di override di jQuery per evitare conflitti con altre librerie e questo non ha funzionato.

Ho ottenuto la demo della fisarmonica da stickmanlabs.com .

E il completamento automatico di jQuery può essere ottenuto dal sito jQuery .

Qualcun altro ha riscontrato questo problema?

Ci sono due possibili soluzioni: c’era un conflitto con una versione precedente di Scriptaculous e jQuery (Scriptaculous stava tentando di estendere il prototipo di array nativo in modo errato) – prima prova ad aggiornare la tua copia di Scriptaculous.

Se non funziona, dovrai usare noConflict() (come accennato sopra). Tuttavia, c’è un problema. Poiché includi un plug-in, devi includere gli include in un ordine specifico, ad esempio:

       

Spero che questo aiuti a chiarire la situazione.

jQuery consente di rinominare la funzione jQuery da $ a qualcos’altro per evitare conflitti nello spazio dei nomi con altre librerie.

Puoi fare qualcosa di simile

 var J = jQuery.noConflict(); 

Dettagli qui: michaelshadle.com – la modalità no-conflict di jQuery: ancora un altro motivo per cui è il migliore

In questo caso, non vedo davvero il motivo dell’utilizzo di entrambe le librerie contemporaneamente.

Puoi usare Prototype (beh, Scriptaculous ‘effettivamente) Ajax.Autocompleter e ditch jQuery, oppure puoi usare jQuery’s Accordion ed eliminare Prototype.

Utilizzare entrambe le librerie contemporaneamente non è davvero una buona idea, perché:

  1. Possono causare conflitti.
  2. Includendoli entrambi, costringi gli utenti a scaricarli entrambi. Quale non è un approccio amichevole per la larghezza di banda.