2009-07-21 6 views
0

I onsubmit Handler in einem Formular-Tag wie folgt angebracht haben:Javascript Globals Variablen unveränderlich in onsubmit Ereignishandler

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

aber was auch immer globale Variable (zuvor definiert, natürlich) Ich versuche, innerhalb get_prepared_build zu ändern() Funktion - später erscheint es nicht modifiziert. Es sieht so aus, als ob diese Funktion eine lokale Kopie von allem erledigt, selbst Dokumenteigenschaftswerte werden nicht gespeichert.

Gibt es Scope/Sichtbarkeitsprobleme, wenn JavaScript-Funktionen auf diese Weise von Tags/Attributen aufgerufen werden? Hier

ist die Funktion:

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

dann unten im Dokument Ich habe

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

Als Ergebnis - im Fenster Ich habe einen neuen Titel, aber die Warnfenster werden angezeigt alte Variable Wert.

+2

Ein Beispielcode könnte nützlich sein – RaYell

+0

Hinzugefügt Beispiel - mit Kommentaren. – AlexA

Antwort

1

Ihre letzte Frage zu beantworten, nein, es gibt keinen Raum/Sichtprobleme bei der JavaScript-Funktionen von Tags genannt werden/Attribute:

<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> 

Wie in den Kommentaren erwähnt wurde, eine Probe von Code Ihr spezifisches Problem demonstriert Wäre hilfreich.

BEARBEITEN: In Ihrem Beispiel wird die Funktion, die document.title aktualisiert nie aufgerufen, oder wird nach Ihnen alert() der aktuelle Wert aufgerufen, so document.title scheint sich nicht zu ändern.

<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>