2012-05-15 7 views
8

Ich bin ziemlich neu Javascript zu nutzen und hier ist das, was ich bisher:Wie deaktiviere ich vorübergehend eine Absenden-Schaltfläche für 3 Sekunden (onsubmit), dann wieder aktivieren?

<!-- this is to disable the submit button and then re-enable it after 3 sec --> 

<script type="text/javascript"> 

    function enable() 
    { 
    var x = document.LAYOUTFORM.getElementById("create_button"); 
    setTimeout(x.removeAttribute("disabled"), 3000); 
    } 

</script> 

Und für die Schaltfläche Ich habe dies:

<INPUT TYPE="SUBMIT" VALUE=" Create PDF " class="FORMBUTTON" ID="create_button" onclick="javascript:this.disabled=true;javascript:enable();"> 

Ich habe mit diesem für Stunden und am meisten verwirrt von du wirst es anschauen und sofort wissen, was falsch ist. Meine Formular ID und Name ist LAYOUTFORM. Kann mir jemand sagen, was ich hier falsch mache?

Für Bonuspunkte möchte ich auch, dass der Text der Schaltfläche vorübergehend zu "Creating ..." wechselt, während er deaktiviert ist, und dann zurück zu Create PDF.

+0

[SetTimeout] (https: //developer.mozilla.org/de/ DOM/window.setTimeout) – Musa

+0

Das ist eine schöne Idee! Vielen Dank. – ninjagecko

+0

AmazingChase bitte eine Antwort akzeptieren. –

Antwort

0

Sie die Taste entweder durch id zugreifen können, die global eindeutige oder durch die name einzigartig in der umschließenden Form

Also Sie haben, ist entweder

var x = document.getElementById("create_button"); 

oder

var x = document.LAYOUTFORM.elements["create_button_name"]; 

(Angenommen, create_button_name ist der Name der Schaltfläche:

<input type="submit" value=" Create PDF " id="create_button" name="create_button_name" class="formButton" onclick="javascript:this.disabled=true;javascript:enable();"> 

)

Der erste Parameter des setTimeout sollte eine Funktion sein:

setTimeout(removeAttr, 3000); 

function removeAttr() { 
    x.removeAttribute("disabled") 
} 

BTW, HTML muss nicht sein (und sollte nicht sein, zur besseren Lesbarkeit etc.) in Großbuchstaben.

0

Löschen Sie die LAYOUTFORM zwischen Dokument und getElementById.

Nur ein Fyi, mit Firebug, Chrome-Entwickler-Tools oder was auch immer die entsprechenden Tools für IE sind, können Sie mit Ihrem Javascript auf der Konsole Affe. Console.log gibt auch Text und sogar Objekte (in CDT) aus, die Sie überprüfen können. Sehr nützlich für die Erkundung :)

0

Mehrere Probleme. Zunächst verwenden Sie im onclick-Attribut javascript: was für URLs gilt. Zeug im onclick-Attribut wird bereits als Code ausgewertet. Zweitens sollte der Code in Ihrem setTimeout entweder eine Zeichenfolge oder ein Funktionsname sein. Sie sollten etwas mehr tun, wie folgt:

HTML:

<INPUT TYPE="SUBMIT" VALUE=" Create PDF " class="FORMBUTTON" ID="create_button" onclick="disable();"> 

JavaScript:

<script type="text/javascript"> 

    function disable() { 
     x=document.getElementById("createbutton"); 
     x.disabled=true; 
     x.value="Creating..."; 
     setTimeout(enable, 3000); 
    } 

    function enable() { 
     x.disabled=false; 
     x.value=" Create PDF "; 
    } 

</script> 
+0

Sorry, lass es uns nochmal versuchen ... Hey danke für die Hilfe. Ich war nicht einmal in der Nähe. Die Schaltfläche ändert und deaktiviert nun und ändert sich wieder, aber das Formular wurde nicht mehr gesendet. Ich habe den Aufruf von disable() zu einem onsubmit innerhalb des Formular-Tags verschoben und alles funktioniert perfekt. Du entscheidest! – AmazingChase

+0

Gut, froh, dass es funktioniert hat. Sie können diesen vorherigen Kommentar löschen, indem Sie den Mauszeiger darüber bewegen und das kleine x drücken. –

0

Es gibt zwei Hauptprobleme mit Ihrem JavaScript:

  1. Die .getElementById() Methode gehört zu document, nicht zu Ihrem Formular (oder einem anderen) Element.

  2. setTimeout() erwartet, dass der erste Parameter eine Funktion (oder ein String, aber fast nie eine Situation, wenn eine Zeichenfolge geeignet ist) ist.

Versuchen Sie folgendes:

function enable() { 
    var x = document.getElementById("create_button"); 
    setTimeout(function() { 
     x.removeAttribute("disabled"); 
    }, 3000); 
} 

Sie können gerne die Sperrung kombinieren und die erneute Aktivierung in eine einzige Funktion:

<INPUT TYPE="SUBMIT" ... onclick="temporaryDisable(this);"> 

function temporaryDisable(el) { 
    el.disabled = true; 
    setTimeout(function() { 
     el.disabled = false; 
    }, 3000); 
} 

Beachten Sie, dass Sie nicht brauchen, .removeAttribute() zu verwenden Sie können die Eigenschaft .disabled direkt festlegen (wie Sie es bereits getan haben, als Sie das Element deaktiviert haben).

EDIT: Nur die "Bonuspunkte" Teil Ihrer Frage gesehen. Sie müssen nur die .value Eigenschaft setzen:

function temporaryDisable(el) { 
    var oldLabel = el.value; 
    el.value = "Creating..."; 
    el.disabled = true; 

    setTimeout(function() { 
     el.disabled = false; 
     el.value = oldLabel; 
    }, 3000); 
} 
+0

Danke, das hat perfekt funktioniert, jetzt habe ich 2 Möglichkeiten, wie das geht. Vielleicht hilft das jemand anderem mit dem gleichen Problem in der Zukunft. Google hatte nicht viel für dieses spezielle Problem. – AmazingChase

13

einfachste Weg:

<input ... onclick="lockoutSubmit(this)"> 

In Ihrem javascript:

function lockoutSubmit(button) { 
    var oldValue = button.value; 

    button.setAttribute('disabled', true); 
    button.value = '...processing...'; 

    setTimeout(function(){ 
     button.value = oldValue; 
     button.removeAttribute('disabled'); 
    }, 3000) 
} 
+0

ehrfürchtig .. Danke :) Ich war am Anfang setTimeout() 1. Parameter – agpt

+0

nicht in Google Chrome einreichen ... – CyborgNinja23