Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
* Inserire due script javascript in una pagina web.
Nuovo argomento   Rispondi    Indice del forum -> Linguaggi per Internet
Precedente :: Successivo  
Autore Messaggio
A&O
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 02/01/08 22:19
Messaggi: 130

MessaggioInviato: 27 Nov 2009 18:47    Oggetto: * Inserire due script javascript in una pagina web. Rispondi citando

Ciao a tutti,
è la prima volta che posto in questa sezione dei forum di olimpo informatico.

Sono un neofita ina materia e mi do da fare (con i miei mezzi) a creare pagine web con scarsa conoscenza della materia ma armato di buona volontà, desiderio di apprendere ecc.

Spero ce questa mia richiesta non alteri la sensibilità di chi, più esperto, tollera a fatica questi (lo ammetto) a volte grossolani tentativi...

Il problema.
In una pagina web che sto creando volevo inserire un menù creato con javascript chiamato Menu/accordion con MooTools (la demo è visibile qui: link ). Ho inserito il codice nella pagina e il relativo file.js nella cartella sorgente e tutto funziona.

Successivamente ho voluto inserire un secondo script, sempre in javascript, relativo ad un effetto di slideshow di immagini (articolo e codice in questa pagina link. Sistemato anche qui il codice e i file ho notato, dopo vari tentativi (molto a caso) che l'uno impedisce il funzionamento dell'altro. Mai si è verificato il funzionamento di entrambi gli effetti in contemporanea.

È possibile questa coesistenza di due codicI?
In caso affermativo riuscite a dirmi dove si innesca l'errore?

A questo LINK trovate un file di testo con il codice, per ora inserito della pagina.

Grazie
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 12:16
Messaggi: 11809
Residenza: Tokelau

MessaggioInviato: 27 Nov 2009 19:03    Oggetto: Rispondi citando

può darsi che capiti che in entrambi gli script si crei un riferimento ad una stessa variabile, o che venga definita una medesima funzione.

Come trovare il responsabile, però, non saprei suggerirtelo. Potresti provare mettendo prima solo il più lungo dei due script, provare se funziona, poi aggiungere una piccola parte del secondo, controllare se funziona ancora il primo e avanti così finché il primo non si guasta. A quel punto hai 'isolato' il responsabile, si può trovare una soluzione...

Ciao
Top
Profilo Invia messaggio privato HomePage
A&O
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 02/01/08 22:19
Messaggi: 130

MessaggioInviato: 27 Nov 2009 19:07    Oggetto: Rispondi citando

Grazie per la tempestività.

Citazione:
Potresti provare mettendo prima solo il più lungo dei due script, provare se funziona, poi aggiungere una piccola parte del secondo, controllare se funziona ancora il primo e avanti così finché il primo non si guasta.


I due script funzionano perfettamente da soli. Cosa vuol dire però aggiungere una piccola parte? Come posso capire il modo per dividere in parti uno script?

Grazie
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 27 Nov 2009 21:25    Oggetto: Rispondi citando

Il problema è un po' bastardo.
Il tutto nasce dal fatto che usi due framework mootools per il menù e jquery per gli effetti; entrambi usano la funzione $() quindi si rompono a vicenda.

Devi sovrascrivere il namespace globale di jquery.
Qui la documentazione di jquery spiega come fare.

Ti ritroverai a dover modificare il codice che crea gli effetti sulle immagini con la nuova variabile ossia ogni volta che nel codice js appare una roba tipo:
Codice:

$(...)

dovrai sostituire con (seguendo l'esempio del link che ho postato)
Codice:

$j(...)


E' sempre un po' rognoso mischiare più librerie anche se a volte non si può fare altrimenti.
Top
Profilo Invia messaggio privato
A&O
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 02/01/08 22:19
Messaggi: 130

MessaggioInviato: 27 Nov 2009 23:18    Oggetto: Rispondi citando

Non ci sono...... Think Think

Ho letto l'articolo e in base a quello che ho compreso ho fatto questo (correggimi dove ho sbagliato):

    Ho inserito nell'head lo script:
    Codice:
    <script>
         var $j = jQuery.noConflict();
         
         // Use jQuery via $j(...)
         $j(document).ready(function(){
           $j("div").hide();
         });
         
         // Use Prototype with $(...), etc.
         $('someid').hide();
       </script>


    Nello script relativo alle immagini ho mutato $(...) in $j(...)


Ma non funziona......
Prima era attivo solo l'effetto delle immagini (no quello del menu). ora nessuno dei due.

Dove sbaglio?

Grazie
-----------------------------------

Evvai Jump Jump Popcorn Dancing Evviva Evviva
HO RISOLTO!!!!

Grazie alla tua segnalazione, che forse non avevo ben compreso, ho fatto ulteriori ricerche sui conflitti che coinvolgono jquery ho trovato questo artcolo.

Quindi ho inserito nell'head dapprima gli script jquery ai quali ho fatto seguire
Codice:
<script type="text/javascript">
$j = $;  //rename $ function
</script>

e di seguito lo script relativo a Mootools.

Probabilmente, non comprendendo cosa stavo facendo, l'errore stava nella scrittura dello script jquery.NoConflict.
Non che ora abbia compreso qualcosa in più ma...

Tutto funziona a meraviglia!!!

Non so come ho fatto ma sono strafelice!

Grazie!
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 28 Nov 2009 19:25    Oggetto: Rispondi

Mah, in teoria doveva quello che ho linkato. Però non dovevi usare lo script dell'esempio del link, ossia:
Codice:

<script>
     var $j = jQuery.noConflict();
     
     // Use jQuery via $j(...)
     $j(document).ready(function(){
       $j("div").hide();
     });
     
     // Use Prototype with $(...), etc.
     $('someid').hide();
   </script>

ma limitarti a:
Codice:

var $j = jQuery.noConflict();

che ridefinisce il namespace globale di jquery.
Dopo aver fatto quello dovevi sostituire nel tuo script il $(..) con $j(...).
Comunque se anche con la pura assegnazione di $j=$ il tutto funge, bene.
Non so però se in altri casi basterà, in realtà non ho scartabellato il metodo noConflict() quindi di preciso non so quello che fa.

Comunque grazie al tuo intervento ho scoperto un effetto che mi tornerà utile tra qualche giorno!

Bau
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Linguaggi per Internet Tutti i fusi orari sono GMT + 2 ore
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi