Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Problema jQuery "$ is not defined"

    ciao a tutti

    ho scaricato (credo proprio da HTML.it) uno script per tooltip personalizzati.
    ve lo posto
    codice:
    this.tooltip = function(){
    		xOffset = 10;
    		yOffset = 20;	
    	$("img").hover(function(e){
    		if((this.title!="")&&(this.title!="undefined")){
    			this.t = this.title;
    			this.title = "";									  
    			$("body").append("<p id='tooltip'>"+ this.t +"</p>");
    			$("#tooltip")
    				.css("top",(e.pageY - xOffset) + "px")
    				.css("left",(e.pageX + yOffset) + "px")
    				.fadeIn("medium");
    		}
        		},
    		function(){
    			this.title = this.t;
    			$("#tooltip").animate({opacity:'0'},250);
    			$("#tooltip").queue("fx",function(){$("#tooltip").remove();});
    		});	
    	$("img").mousemove(function(e){
    			$("#tooltip")
    				.css("top",(e.pageY - xOffset) + "px")
    				.css("left",(e.pageX + yOffset) + "px");
    		});	
    };
    
    $(document).ready(function(){
    		this.tooltip();
    	});
    fino a qualche tempo fa funzionava (sempre sulla stessa pagina) da qualche tempo a questa parte ha deliberatamente deciso che non ne aveva più voglia e ha trovato un modo quantomeno singolare di rompermi i maroni....
    facendolo andare in chrome vedo che effettivamente i tooltip personalizzati non ci sono, guardo nella console e mi rileva un errore a $(document).ready(function(){ dicendomi che $ non è stato definito...
    ovviamente io jquery l'ho incluso nella pagina, infatti tutte le altre volte che la console javascript incontra $ non mi dice niente!! ma allora come è possibile che solo UNA volta nello stesso script (manco fosse la prima che compare) mi dica che non è stato definito?

    a qualcuno viene il lampo di genio? come risolvo sta situazione scomoda?

    grazie in anticipo a chi mi risponderà :P

  2. #2
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    come e dove includi jQuery?
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  3. #3
    in una pagina ho una roba del genere

    pagina:
    codice:
    <html>
    <head>
    <script src="http://ultimateshadow.altervista.org/Scripts/latestjquery.js"></script> 
    <script src="./scripts/tt.js"></script>
    latestjquery.js:
    codice:
    const latest_jquery = "http://ultimateshadow.altervista.org/Scripts/jquery-1.4.2.min.js";
    
    var js=document.createElement('script');
    js.setAttribute('type','text/javascript');
    js.setAttribute('language','javascript');
    js.setAttribute('src',latest_jquery);
    document.getElementsByTagName('head')[0].appendChild(js);
    so cosa stai pensando, è uno script stupido ma lo uso perchè lo richiamo da tutti i miei siti e mi basta cambiare la prima riga di questo js senza dover aggiornare in tutti i posti in cui l'ho incluso (e funzione perchè jquery lo uso liberamente in tutte le pagine così definite)

    comunque questo è quanto mi hai chiesto, se ti serve altro dimmi pure

  4. #4
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    la domanda nasceva proprio dal fatto che immaginavo che jQuery fosse incluso e appeso in pagina con .createElement() e .appendChild(), metodo che rende asincrona l'esecuzione del codice

    in altre parole l'inclusione di latestjquery.js e tt.js è sì sequenziale, ma non è detto che jQuery venga sempre incluso in pagina PRIMA di tt.js (entri in una race condition)

    hai due modi (alternativi) per risolvere:
    1) includere jQuery con un normale <script src...></script> (preferibile)
    2) appendere anche tt.js all'evento onload dell'elemento script che contiene jquery, ovvero

    ...
    js.onload = function() {
    // createElement e appenChild di tt.js
    }
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  5. #5
    ok siccome sono anticonformista scelgo il metodo 2 ahahahah
    no sul serio, il due mi piace, ma proprio tanto
    solo che non ho capito quel codice dove lo devo mettere....

    così?
    codice:
    <script src="http://ultimateshadow.altervista.org/Scripts/latestjquery.js">
    js.onload = function() {
    // createElement e appenChild di tt.js
    }
    </script>
    e "js" è una variabile interna di javascript o devo impostarla in qualche modo?


    detto questo, posso capire a questo punto perchè mi dica che solo l'ultimo $ non è stato dichiarato, perchè comunque non riconoscendo quello non fa partire la funzione in cui ci sono gli altri $ e non rileva l'errore, però ora mi sorge un dubbio... se io carico il tt.js in modo asincrono dopo jquery non c'è il rischio che l'evento $(document).ready() sia già passato al momento del caricamento dello script?

  6. #6
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    se pensi che questo metodo sia meglio che non scrivere direttamente due righe... contento tu.

    var js=document.createElement('script');
    js.setAttribute('type','text/javascript');
    js.setAttribute('language','javascript');
    js.setAttribute('src',latest_jquery);

    js.onload = function() {

    var js=document.createElement('script');
    js.setAttribute('type','text/javascript');
    js.setAttribute('language','javascript');
    js.setAttribute('src',tt.js);
    document.getElementsByTagName('head')[0].appendChild(js);

    };

    document.getElementsByTagName('head')[0].appendChild(js);
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  7. #7
    penso che sia meglio per il semplice motivo che non mi ricordo mai dove devo aggiornare le due righe e me ne dimentico sempre qualcuna xD

    comunque grazie, provo la tua soluzione

  8. #8
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    Originariamente inviato da ultimateshadow
    penso che sia meglio per il semplice motivo che non mi ricordo mai dove devo aggiornare le due righe e me ne dimentico sempre qualcuna xD

    comunque grazie, provo la tua soluzione

    se hai un applicazione con così tante pagine da poter incorrere in questo rischio ti consiglio piuttosto di fare un include di un file php (o asp) nell'header che contenga quei due script.

    Il caricamento fatto così invece è solo una soluzione impropria
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  9. #9
    hai ragione anche tu ma io ho la testa quadrata, mi piace trattare js con js e php con php xD

    e comunque non è un'applicazione vasta ma è un mod per poter accedere a jquery nello stesso modo da diversi domini. lo faccio per comodità più che per necessità.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.