2013-06-05 6 views
5

Ich habe ein Textfeld, aus dem ich eine Funktion auf onChange Ereignis aufrufen. Ich werfe ein Bestätigungsfenster hier, wenn der Wert in diesem Textfeld geändert wird. Wenn Abbrechen (im Bestätigungsfenster) angeklickt wird, muss der alte Wert in das Textfeld zurückgesetzt werden. Wenn Sie auf OK klicken, wird der neue Wert beibehalten. Ich habe das schon lange versucht, bin aber nicht in der Lage, den alten Wert beizubehalten.Wie alten Wert zu erfassen und setzen Sie es auf Abbrechen mit JavaScript

ZB: Vor onchange, val in Textfeld = 'zuerst'; onChange-Ereignis, val geändert zu "Sekunde", Bestätigungsfenster öffnet sich, wenn ok ausgewähltes Textfeld sollte zweite haben und wenn Abbrechen ausgewählt ist, sollte "zuerst" in dem Textfeld vorhanden sein.

function onChangeOfValue(input){ 
    //var oldValue = document.getElementById(input).value; 
    document.getElementById(input).onchange = function(){ 
    var newValue = this.value; 
    alert("newVal is--->"+newValue); 
    if(document.getElementById(input) != null && document.getElementById(input) != '' 
    && !confirm("Do you want to continue?")){ 

    // this.input=oldValue; 
     return false; 
    } 
    } 

} 
+2

Sie suchen nach 'defaultValue'. – ericosg

+0

Suche nach dem Wert in diesem Textfeld, bevor eine Änderung versucht wird. –

+0

ich verwende defaultValue um meinen oldValue zu speichern – ericosg

Antwort

15

Beachten Sie, dass Kontrollen haben eine default Eigenschaft bilden, die der Standardwert (überraschend) ist. Sie können diese Eigenschaft verwenden, um den vorherigen Wert der Eingabe zu speichern oder den Wert auf den vorherigen Wert zurückzusetzen.

Also zusammen die Vorschläge, die Sie erhalten haben, wird die folgende Funktion einen Verweis auf das Element übergeben und fragt den Benutzer, ob sie den aktuellen Wert beibehalten möchten. Wenn sie mit Ja antworten, wird defaultValue des Eingangs auf den aktuellen Wert gesetzt. Wenn der Benutzer nein sagt (d. H. Abbrechen), wird der Wert auf defaultValue zurückgesetzt.

Beachten Sie, dass dieser Ansatz des Eingangs der ursprünglichen Wert überschrieben wird, so dass, wenn Sie das Formular zurückzusetzen, die Wert des Eingangs wird auf den aktuellen default zurückgesetzt.

Dieser Ansatz funktioniert für eine beliebige Anzahl von Eingaben auf derselben Seite und in derselben Form.

+0

+1 von mir - nicht sicher, wer downvoted. Interessanterweise funktioniert defaultValue in älteren Browsern? Ich meine, natürlich können Sie eine Eigenschaft wie diese im Code einstellen, aber wenn Sie '' tun, wird foo immer noch in der Textbox in IE8 angezeigt und wird als Anfangswert des Elements angezeigt .Standardwert? –

+0

Ahh - Ich fühle mich albern - defaultValue nimmt den Wert auf, mit dem Sie die Eingabe rendern. Ordentlich. Immer noch nicht sicher, ob es in IE8 funktioniert - ich denke, jsFiddle spielt nicht gut damit –

+0

'defaultValue' funktioniert. Vielen Dank !!!! –

5

würde ich eine Schließung verwenden Spur des letzten Wertes zu halten:

(function(){ 
    var oldValue = document.getElementById(input).value; 
    document.getElementById(input).onchange = function(){ 
     var newValue = this.value; 
     alert("newVal is--->"+newValue); 
     if(document.getElementById(input) != null 
      && document.getElementById(input) != '' 
      && !confirm("Do you want to continue?")){ 

      this.value = oldValue; 
      return false; 
     } else { 
      oldValue = this.value; 
     } 
    }; 
})(); 
+0

Ich weiß nicht, was Schließung ist (Anfänger zu JS). Ab sofort wird onChange dieses Textfelds eine 'onChangeOfValue'-Funktion aufrufen. Soll ich den obigen Code hinzufügen? Es wird automatisch den alten Wert erfassen? Ich bezweifle das. –

+1

Eine Schließung bedeutet grundsätzlich, dass eine Funktion Zugriff auf den Kontext hat, der beim Aufruf vorhanden war. Ich sage, ersetzen Sie Ihre onchange Handler mit dem, was ich habe, sollten Sie bekommen, was Sie wollen –

+0

Angenommen, Textfeld ID ist 'home', dann var oldValue = document.getElementById ("home"); Wird der alte Wert vor der Änderung erfasst? –