2009-07-01 2 views
7

Ich benutze ein Formular und jQuery, um eine schnelle Änderung auf einer Website zu machen. Ich möchte den Schaltflächentext in 'Gespeichert!' Ändern. Ändern Sie ihn nach einigen Sekunden wieder in Update, damit der Benutzer den Wert erneut ändern kann. Natürlich können sie das jetzt 'Gespeicherte!' Taste erneut, aber es sieht nicht gut aus.Verwenden von jQuery zum Ändern der Eingabe Schaltfläche Text nach ein paar Sekunden

$("form.stock").submit(function(){ 
    // Example Post 
    $.post($(this).attr('action'), { id: '123', stock: '1' }); 
    $(this).find(":submit").attr('value','Saved!'); 
    // This doesn't work, but is what I would like to do 
    setTimeout($(this).find(":submit").attr('value','Update'), 2000); 
    return false; 
}); 

Antwort

13

Das erste Argument für setTimeout ist die Funktion. So wickeln Sie Ihren Code in einer anonymen Funktion und Sie sind gut zu gehen.

$("form.stock").submit(function(){ 
    // Example Post 
    $.post($(this).attr('action'), { id: '123', stock: '1' }); 
    var submit = $(this).find(":submit").attr('value','Saved!'); //Creating closure for setTimeout function. 
    setTimeout(function() { $(submit).attr('value','Update') }, 2000); 
    return false; 
}); 

Ich bin nicht in der Lage, diesen Code jetzt zu testen. Lass es mich wissen, wenn es nicht funktioniert.

BEARBEITEN: Wie von redsquare vorgeschlagen, ist es sinnvoll, Schließung von der Übermittlungsschaltfläche selbst zu erstellen.

+0

Vielen Dank, dass Sie auf das Offensichtliche hingewiesen haben! :) –

+1

keine Notwendigkeit, den Submit-Selektor zweimal auszuführen, können Sie das in eine Variable innerhalb der setTimeout setzen – redsquare

+0

Vereinbarte, änderte den Code, um diesen Ansatz zu reflektieren. – SolutionYogi

0

Sie wollen wahrscheinlich die Aktion in einer Funktion wickeln:

setTimeout(function(){$(this).find(":submit").attr('value', 'Update')}, 2000); 
+0

Ich denke 'dies' in der anonymen Funktion setTimeout wird nicht korrekt funktionieren. Man muss den Verschluss verwenden, um "dieses" zu erfassen. – SolutionYogi

0
$("form.stock").submit(function(){ 
    var $form = $(this); 
    $.post($form.attr('action'), { id: '123', stock: '1' }); 
    var $submit = $form.find(":submit").attr('value','Saved!'); 
    window.setTimeout(function() { 
     $submit.attr('value','Update') 
    }, 2000); 
    return false; 
}); 
2

ich vorschlagen würde vielleicht eine andere (meiner Meinung nach besser) -Schnittstelle Feedback zu geben, als den Text der Schaltfläche Ändern . Sie können jGrowl oder das dialog Widget verwenden, um eine Nachricht über einen Rückruf von der Post-Methode anzuzeigen.

+0

+1 für Benutzerfreundlichkeit (Feedback) – karim79

6

Wenn es tatsächlich ein "Knopf" -Tag ist, dann zu ändern, würden Sie verwenden.

$('#button_id').html('New Text'); 

Natürlich, wenn Sie diesen onClick für diese Schaltfläche sind Vorformen dann könnte man leicht passieren einfach (dies) in die Funktion als Objekt und $ (this) .html (‚New Text‘); stattdessen.

Ich hoffe, das hilft jemandem.

Verwandte Themen