Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Richiamare .js esterno

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    24

    Richiamare .js esterno

    Ciao ragazzi. Ho un problema con il richiamo di un file esterno. Se la funzione javascript la inserisco nell'html tutto funziona a meraviglia. Non appena taglio e incollo la funzione su un file .js esterno (scrivendo poi <script type = "Javascript" src = "js/schedareg.js"></script>)

    Il codice non parte più. Ora, ho cercato ovunque e mi sono letto la sezione della guida in javascript. Copiando anche pari pari dal manuale che ho qui cn me ora... ma niente.

    Da qui una lunga serie di domande:

    -E' scritto sulla guida che il richiamare funzioni vale esclusivamente con netscape 4 e Explorer 4 in sù... vero? Safari e firefox non prevedono questa cosa?

    -Possibile che sbaglio l'indirizzo nel src? in pratica l'url della pagina è index.php?action=azione. dove nel codice php dell'index se action è = azione. include nell'html il file html con dentro anche le mie fuzioni js... potrebbe essere questo il mio problema?

    Spero di essermi spiegato bene, prima di scrivere qui ho cerkato un pò a destra e a manca. Ma a quanto pare sono l'unico sul web ad avere incontranto questo tipo di problema.

    P.s. fai che sia il Mac su cui lavoro. Tra Mamp e Zend devo attivare qualcosa?

    Come al solito vi stimo indiscriminatamente tutti quanti!

  2. #2
    Moderatrice di Grafica, Cerco e offro lavoro L'avatar di Myaku
    Registrato dal
    Nov 2006
    Messaggi
    10,349
    se lo stai scrivendo nel codice così come l'hai riportato qui nel thread, magari gli spazi che hai messo prima e dopo gli = danno fastidio).
    Ognimodo, il type va settato a "text/javascript":

    codice:
    <script type="text/javascript" src="tuofile.js">
    </script>

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    24
    Sì vero. Il fatto è che dopo due giorni che mi ci picchio oramai le sto tentando tutte. Cmq se ho ben inquadrato il problema... (sicuramente no) è che la funzione javascript in questione si basa su degli eventi che accadono nella pagina html (scelta radio button oppure scelta di un'opzione in una select)... nn è che essendo esterno magari "non vede" questi eventi? Se ho detto una cavolata spero di non averla detta immensa.

    Cmq dopo l'ennesimo tentativo ora mi trovo con
    <script type = "text/javascript" src = "schedareg.js"></script>
    e non funziona.

    Ultime Notizie. Ora nel file js esterno c'ho messo semplicemente la dichiarazione del mio array di città mentre la funzione che mi modifica la select l'ho lasciata nell'html e.... la funzione parte ma è come se nn trovasse valori, ovvero come sè non venisse inserito appunto lo script.

    C'è qualcuno che quand'era piccolo ha avuto la stessa difficoltà???

  4. #4
    Moderatrice di Grafica, Cerco e offro lavoro L'avatar di Myaku
    Registrato dal
    Nov 2006
    Messaggi
    10,349
    ma gli spazi prima e dopo gli = li hai tolti?

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    24
    Sì sì... e niente...

  6. #6
    Moderatrice di Grafica, Cerco e offro lavoro L'avatar di Myaku
    Registrato dal
    Nov 2006
    Messaggi
    10,349
    Originariamente inviato da Kronil
    Sì sì... e niente...
    spiace
    passo parola, per quel poco che ne so di js, ci ho provato


  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    24
    No ma che grazie mille cmq Myaku per il tentativo!

  8. #8
    Originariamente inviato da Kronil è che la funzione javascript in questione si basa su degli eventi che accadono nella pagina html (scelta radio button oppure scelta di un'opzione in una select)... nn è che essendo esterno magari "non vede" questi eventi?
    <script type = "text/javascript" src = "schedareg.js"></script>
    e non funziona.
    allora ora ti spiego, i file esterni vengono caricati e se eseguono funzioni queste vengono eseguite nel momento in cui il parser javascript le raggiunge, questo potrebbe voler dire che per qualche motivo l'html non è stato completamente caricato, e che dunque se una funzione riferisce a questi elementi il js non funzionerebbe per il semplice fatto che al momento in cui tu vuoi usare il dom, quest' ultimo non è caricato..

    detto ciò come si risolve?
    Semplice, basta far si che le funzioni che vengono richiamate (e che fanno riferimento al DOM)
    partano quando il dom è effettivamente caricato, ossia nella buona parte dei casi basta fare una funzione che parte all onload e spostare li le tue funzioni.

    esempio

    codice:
    //Supponiamo tu adesso abbia qualcosa di sto tipo:
    
    function miafunzione(){
       document.getElementById("mioDiv").innerHTML="Funziono!";
    }
    //esempio errato, parte prima del caricamento del DOM!!!
    miafunzione();
    devi trasformarla in :
    codice:
    function miafunzione(){
       document.getElementById("mioDiv").innerHTML="Funziono!";
    }
    
    onload=function(){
       miafunzione();
    }
    ora questo può portare ad un problema se hai già un evento onload associato, poichè
    rischieresti di sovrascrivere l'evento onload.
    esempio:
    codice:
    //Queste 2 funzioni magari sono in un altro script e tu non lo sai  :dottò: 
    function hello(){
    alert("hello");
    }
    onload=hello;
    
    function miafunzione(){
       document.getElementById("mioDiv").innerHTML="Funziono!";
    }
    onload=function(){
       miafunzione();
    }
    questo causa un problema, solo una delle due funzioni partirà, e piu precisamente partirà solo quella che viene per ultima, visto che sovrascrive quella prima

    e questo come capperi si risolve?
    pure questo è semplice, basta salvare l'eventuale evento onload prima di aggiungere quello nuovo:

    codice:
    //Queste 2 funzioni magari sono in un altro script e tu non lo sai  :dottò: 
    function hello(){
    alert("hello");
    }
    onload=hello;
    
    
    function addOnload(f){
    
    var oldOnload=window.onload;
    onload=function(){
       if(oldOnload)oldOnload();
       if(f)f();
    }
    
    }
    
    function miafunzione(){
       document.getElementById("mioDiv").innerHTML="Funziono!";
    }
    addOnload(function(){
       miafunzione();
    });

    sono puntiglioso, questa sotto è una cosa avanzata, nel senso che difficilmente sarà il tuo caso, ma per completezza la elenco:

    ...Ci sarebbe un altro problema, causato dal fatto che se, per esempio, ci fossero delle immagini molto grande l'onload partirebbe solo dopo che tutte le immagini son state scaricate, per questo devi affidarti ad una soluzione un po piu' drastica, cioè utilizzare una serie di trucchetti, che ha ben riassunto il caro e vecchio Andr3a qui:
    http://www.3site.eu/jstests/onContent/onContent.js
    dopo aver incluso questa funzione potrai finalmente risolvere il tutto con quest' ultima implementazione del codice sopra:

    codice:
    function onContent(f){//(C)webreflection.blogspot.com
    var a=onContent,b=navigator.userAgent,d=document,w=window,c="onContent",e="addEventListener",o="opera",r="readyState",
    s="<scr".concat("ipt defer src='//:' on",r,"change='if(this.",r,"==\"complete\"){this.parentNode.removeChild(this);",c,".",c,"()}'></scr","ipt>");
    a[c]=(function(o){return function(){a[c]=function(){};for(a=arguments.callee;!a.done;a.done=1)f(o?o():o)}})(a[c]);
    if(d[e])d[e]("DOMContentLoaded",a[c],false);
    if(/WebKit|Khtml/i.test(b)||(w[o]&&parseInt(w[o].version())<9))(function(){/loaded|complete/.test(d[r])?a[c]():setTimeout(arguments.callee,1)})();
    else if(/MSIE/i.test(b))d.write(s);
    };
    
    
    //Queste 2 funzioni magari sono in un altro script e tu non lo sai  :dottò: 
    function hello(){
    alert("hello");
    }
    
    onContent(hello);
    
    function miafunzione(){
       document.getElementById("mioDiv").innerHTML="Funziono!";
    }
    
    onContent(function(){
       miafunzione();
    });

  9. #9
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    uhm allora fondamentalmente e' un problema di scope.

    Facendo un passo indietro andiamo a capire dove veramente sono caricati i file .js

    Il browser apre la pagina web innanzitutto, quindi parsa il contenuto e come prime operazioni ne legge l'header.

    Leggendo l'header (<head>....</head>) carica in sequenza i vari dati e metadati che trova.
    Se trova dei fogli di stile se li carica, se trova degli script si carica pure quelli in mem.

    Poi legge il body, carica tutto il contenuto del body in mem e quindi applica in sequenza gli stili.

    Gli script invece hanno un funzionamento differente per cui possono essere eseguiti anche prima dell'effettivo caricamento della pagina html .

    Visto cio' se tu vuoi includere piu' file js differenti devi farlo nel tag <head></head> della pagina. A quel punto tutte le funzioni dei file js avranno la visibilita' delle altre.

    il file js non deve contenere tag html o altro se non sottoforma di commenti o stringhe.
    Sinceramente includere con js altri file e' abb ostico, si puo' fare ma devi smanacciare con i dom o doc.write etc etc stando attento alla compatibilita' con i vari browsers.

    La sol piu' semplice e' caricare i file js nell'header della pagina e morta la'.
    Quando hai fatto cio' puoi caricare dati salvati sul file1.js nel file2.js

    tipo
    Codice PHP:
    file1.js
    ---------------------------------------------
    var 
    harr = new Array();
    harr[0] ="ciao";
    harr[1] ="sono";
    harr[1] ="iooooooooo";
    ---------------------------------------------



    file2.js
    ---------------------------------------------

    function 
    alertHarr()
    {
        try{
        
    str ="";
        for(
    i=0;i<harr.length;i++)
           
    str+= harr[i]+" ";
        
    alert(str);

    }catch(
    e){alerte.message e.message e)}

    ---------------------------------------------

    nel file html
    <head>
    <
    script type="text/javascript" language="javascript" src="path/file1.js"></script>
    <script type="text/javascript" language="javascript" src="path/file2.js"></script>
    </head>

    <body onload="window.setTimeout('alertHarr()' , 2000)">....</body> 

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    24
    Allora prima di tutto... mi inchino dinanzi a tutta sta conoscenza. Ora ci provo... cioè elaboro... e al max nn dovessi venirne a capo.. (nn succederà) mi ritroverete sul forum coperto di benzina e pieno di fiammiferi... Scherzi a parte, grazie mille dell'aiuto, ora ci provo. Bella!

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.