2009-07-21 5 views
0

J'ai joint gestionnaire onsubmit dans une balise de formulaire comme celui-ci:Javascript variables GLOBALS invariables dans le gestionnaire d'événements onsubmit

<form action="file.php" method="post" onsubmit=" return get_prepared_build(this);" > 

mais quelle que soit la variable globale (définie plus haut, bien sûr) je tente de changer l'intérieur get_prepared_build() fonction - plus tard, il apprend non-modifié. On dirait que cette fonction traite d'une copie locale de tout, même les valeurs de propriété de document ne sont pas sauvegardées.

Existe-t-il des problèmes de portée/visibilité lorsque les fonctions javascript sont appelées de cette manière à partir de balises/attributs?

Voici la fonction:

function give_link(results) 
{ 
    document.title = 'visibility test'; 
    return false; 
} 

puis ci-dessous dans le document que j'ai

<script>alert('test' + document.title);</script> 

En conséquence - dans la fenêtre j'ai un nouveau titre, mais la boîte d'alerte affiche ancienne variable valeur.

+2

Un exemple de code pourrait être utile – RaYell

+0

Ajout d'un exemple - avec commentaires. – AlexA

Répondre

1

Pour répondre à votre dernière question, non, il n'y a pas de portée/problèmes de visibilité à l'appel de fonctions JavaScript de balises/attributs:

<script type="text/javascript"> 
var x = 'Hello'; 
function get_prepared_build(f) { 
    alert('Start get_prepared_build: x=' + x + '; document.cookie=' + document.cookie); 
    x = 'There'; 
    // deliberately invalid cookie for test purposes only 
    document.cookie = 'test'; 
    alert('End get_prepared_build: x=' + x + '; document.cookie=' + document.cookie); 
    return false; 
} 
</script> 
<form action="file.php" method="post" onsubmit="var ret=get_prepared_build(this);alert('Outside get_prepared_build: x=' + x + '; document.cookie=' + document.cookie);return ret;"> 
<input type="submit"> 
</form> 

Comme mentionné dans les commentaires, un exemple de code montrant votre problème spécifique serait utile.

EDIT: Dans votre exemple, la fonction qui met à jour document.title n'est jamais invoquée ou est appelée après alert() la valeur actuelle, donc document.title ne semble pas changer.

<script type="text/javascript"> 
function changeDocumentTitle(f) { 
    // this only runs onsubmit, so any alert()s at the bottom 
    // of the page will show the original value before the 
    // onsubmit handler fires 
    document.title = 'new value'; 
    return false; 
} 
</script> 
<form onsubmit="return changeDocumentTitle(this);"> 
<input type="submit"> 
</form> 
<script type="text/javascript"> 
// this executes when the page loads, so it will show 
// the value before any onsubmit events on the page fire 
alert(document.title); // original value 
</script> 
Questions connexes