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

    [JavaScript] Non capisco questo errore

    Ragazzi ho una pagina php dove eseguo questo javascript e mi funziona

    codice:
    <script language="javascript" type="text/javascript">
    function LoginControl() {
    	var f = document.frmLogin;
    	var mail = f.txtLoginMail;
    	var pwd = f.txtLoginPass;
    	document.getElementById("divLoginMail").innerText = "";
    	document.getElementById("divLoginPass").innerText = "";
    	if (mail.value.indexOf("@") >= 0) {
    		var mailSplit = mail.value.split("@");
    		if (mailSplit[0].length < 3) {
    			document.getElementById("divLoginMail").innerText = "E-Mail non è corretta.";
    		} else if (mailSplit[1].length < 6) {
    			document.getElementById("divLoginMail").innerText = "E-Mail non è corretta.";
    		} else {
    			if (mailSplit[1].indexOf(".") >= 0) {
    				var mailSplit2 = mailSplit[1].split(".");
    				if ( (mailSplit2[0].length < 3) || (mailSplit2[1].length < 2) ) {
    					document.getElementById("divLoginMail").innerText = "E-Mail non è corretta.";
    				}
    			} else {
    				document.getElementById("divLoginMail").innerText = "E-Mail non è corretta.";
    			}
    		}
    	} else {
    		document.getElementById("divLoginMail").innerText = "E-Mail non è corretta.";
    	}
    	if (pwd.value.length <= 3) {
    		document.getElementById("divLoginPass").innerText = "Password non è corretta.";
    	}
    	if ( (document.getElementById("divLoginMail").innerText == "") && (document.getElementById("divLoginPass").innerText == "") ) {
    		f.submit();
    	}
    }
    </script>
    però se metto sotto di questa funzione quest'altra funzioncina

    codice:
    <script language="javascript" type="text/javascript">
    function LoginPassError() {
    	document.getElementById("divLoginPass").innerText = "a";
    }
    LoginPassError();
    </script>
    mi da un errore sulla riga:
    document.getElementById("divYoriLoginPass").innerT ext = "a";
    Errore è:
    'document.getElementById(...)' è nullo o non è un oggetto.

    1) Qualcuno sa dirmi perchè da questo errore??
    2) Perchè 'document.getElementById()' non è un oggetto?
    3) Ma se nella funzione precedente funziona, perchè in questa funzione non va più?? La seconda funzione si trova subito sotto la prima...

    PS: Queste due funzioni si trovano all'interno dei tag body.

  2. #2
    document.getElementById("divYoriLoginPass").innerT ext = "a";

    E' un errore che hai fatto tu postando il codice o è scritto davvero "divYoriLoginPass" nell'errore? Perché ad es. non ho visto nessun oggetto con questo nome nell'altra funzione...

    Il browser dice che document.getElementById(...) non è un oggetto perché il metodo getElementById() dell'oggetto document riceve come argomento (quello che ci metti tra le parentesi) l'id di un elemento della pagina. Ovviamente, se nella pagina non hai nessun elemento che abbia un id="divYoriLoginPass", l'oggetto in questione non esiste!

    Non è che la seconda funzione cerchi l'oggetto "divYoriLoginPass" in seguito a una modifica "al volo" dell'attributo id di qualche elemento? Magari hai una funzione che va a riscrivere l'id di un elemento ricevendo un parametro, come una stringa, da aggiungere all'id "originale".
    Non mi spiego altrimenti quel "Yori" nell'id dell'oggetto.

    Spero di essere stato chiaro nella spiegazione...

  3. #3
    Dimenticavo...hai detto che le funzioni sono nel tag <body>.
    Se l'oggetto "divYoriLoginPass" esiste effettivamente nella pagina, la seconda funzione potrebbe andare in errore perché viene richiamata prima che quell'oggetto sia effettivamente "creato". Mi spiego meglio. Le funzioni (che ti consiglio di mettere nella sezione head della pagina per correttezza), sono codice che non viene eseguito finché non sono esplicitamente richiamate. Quindi, al loro interno puoi fare riferimento a oggetti della pagina che ancora non esistono fisicamente, perché il browser "memorizza" solo il codice della funzione. Tuttavia, quando la funzione viene eseguita (e la seconda funzione della tua pagina viene eseguita immediatamente dopo essere stata creata), è necessario che gli oggetti a cui essa si riferisce esistano nella pagina.

    Nel tuo caso quindi, se il tuo oggetto "divYoriLoginPass" è scritto nel codice DOPO la stringa LoginPassError(); (che esegue la funzione), questa non può trovarlo perché viene eseguita prima che quell'oggetto sia interpretato dal browser. Di conseguenza ti dice che "divYoriLoginPass" è nullo o non è un oggetto...

  4. #4
    Originariamente inviato da seed_squall_it
    document.getElementById("divYoriLoginPass").innerT ext = "a";

    E' un errore che hai fatto tu postando il codice o è scritto davvero "divYoriLoginPass" nell'errore? Perché ad es. non ho visto nessun oggetto con questo nome nell'altra funzione...

    Il browser dice che document.getElementById(...) non è un oggetto perché il metodo getElementById() dell'oggetto document riceve come argomento (quello che ci metti tra le parentesi) l'id di un elemento della pagina. Ovviamente, se nella pagina non hai nessun elemento che abbia un id="divYoriLoginPass", l'oggetto in questione non esiste!

    Non è che la seconda funzione cerchi l'oggetto "divYoriLoginPass" in seguito a una modifica "al volo" dell'attributo id di qualche elemento? Magari hai una funzione che va a riscrivere l'id di un elemento ricevendo un parametro, come una stringa, da aggiungere all'id "originale".
    Non mi spiego altrimenti quel "Yori" nell'id dell'oggetto.

    Spero di essere stato chiaro nella spiegazione...
    Quel Yori è un errore che ho fatto nel post, nel codice non c'è..

  5. #5
    Originariamente inviato da seed_squall_it
    Dimenticavo...hai detto che le funzioni sono nel tag <body>.
    Se l'oggetto "divYoriLoginPass" esiste effettivamente nella pagina, la seconda funzione potrebbe andare in errore perché viene richiamata prima che quell'oggetto sia effettivamente "creato". Mi spiego meglio. Le funzioni (che ti consiglio di mettere nella sezione head della pagina per correttezza), sono codice che non viene eseguito finché non sono esplicitamente richiamate. Quindi, al loro interno puoi fare riferimento a oggetti della pagina che ancora non esistono fisicamente, perché il browser "memorizza" solo il codice della funzione. Tuttavia, quando la funzione viene eseguita (e la seconda funzione della tua pagina viene eseguita immediatamente dopo essere stata creata), è necessario che gli oggetti a cui essa si riferisce esistano nella pagina.

    Nel tuo caso quindi, se il tuo oggetto "divYoriLoginPass" è scritto nel codice DOPO la stringa LoginPassError(); (che esegue la funzione), questa non può trovarlo perché viene eseguita prima che quell'oggetto sia interpretato dal browser. Di conseguenza ti dice che "divYoriLoginPass" è nullo o non è un oggetto...
    Ora forse ho capito..
    Se ho la pagina per esempio strutturata così mi da errore giusto??

    <html>
    <head>
    </head>
    <body>
    funzione js
    richiamo della funzione
    la mia div
    </body>
    </html>

    perchè chiamo la funzione prima che sia stato stampato ancora il div
    quindi per evitare errore dovrei fare in questo modo..

    <html>
    <head>
    </head>
    <body>
    funzione js
    la mia div
    richiamo della funzione
    </body>
    </html>

    correggimi se sbaglio...

  6. #6
    Esattamente! O meglio, per scrivere il codice più correttamente:

    codice:
    <html>
    <head>
    funzione js
    </head>
    <body>
    la mia div
    richiamo della funzione
    </body>
    </html>
    Le funzioni, proprio perché non sono eseguite finché non richiamate esplicitamente, è più corretto metterle nella head della pagina. Così facendo vengono caricate prima della pagina stessa (che è tutto quello che contiene il body) e perciò sono immediatamente disponibili.

    Il browser legge ed esegue il codice sempre da sinistra verso destra e dall'alto verso il basso (come avviene in tutti i linguaggi del resto). Quindi è normale che se richiami una funzione che fa riferimento ad un oggetto che viene "letto" dopo, quell'oggetto ancora non esista.

  7. #7
    Originariamente inviato da seed_squall_it
    Esattamente! O meglio, per scrivere il codice più correttamente:

    codice:
    <html>
    <head>
    funzione js
    </head>
    <body>
    la mia div
    richiamo della funzione
    </body>
    </html>
    Le funzioni, proprio perché non sono eseguite finché non richiamate esplicitamente, è più corretto metterle nella head della pagina. Così facendo vengono caricate prima della pagina stessa (che è tutto quello che contiene il body) e perciò sono immediatamente disponibili.

    Il browser legge ed esegue il codice sempre da sinistra verso destra e dall'alto verso il basso (come avviene in tutti i linguaggi del resto). Quindi è normale che se richiami una funzione che fa riferimento ad un oggetto che viene "letto" dopo, quell'oggetto ancora non esista.
    si lo so che meglio mettere le funzioni javascript nel head, però nel mio caso un può complicato perchè ho una pagina php tutta dinamica e varia solo il body e head rimane sempre lostesso...
    quindi purtroppo per forza devo mettere la funzione nel body..
    però io la metto sopra a tutto in modo che non ci siano problemi, quindi credo che il risultato è quasi lostesso...


    Grazie x aiuto.

  8. #8
    Beh, il risultato è indubbiamente lo stesso...era solo per una "correttezza formale".
    Però pensavo...visto che PHP genera per ora solo il body, potresti fargli generare anche la head, in modo da modificarla a piacimento a seconda ad es. di qualche parametro. Solo per comodità tua intendo...cmq anche lasciare le funzioni nel body non cambia nulla.

  9. #9
    Originariamente inviato da seed_squall_it
    Beh, il risultato è indubbiamente lo stesso...era solo per una "correttezza formale".
    Però pensavo...visto che PHP genera per ora solo il body, potresti fargli generare anche la head, in modo da modificarla a piacimento a seconda ad es. di qualche parametro. Solo per comodità tua intendo...cmq anche lasciare le funzioni nel body non cambia nulla.
    non mi conviene, però il codice della head è troppo lungo visto che tengo altre funzioni javascript, quindi generare dei byte in più non è cosa...

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.