Ik ben nieuw bij JS en sta voor een aantal uitdagingen die misschien eenvoudig lijken.
wat ik wil doen is:
- een gebruiker klikt op een knop met de tekst ‘verzenden’
- wanneer op de knop wordt geklikt, verandert het woord ‘verzenden’ in ‘een ogenblik geduld…’ & knop is uitgeschakeld
- de knop is gedurende 2 seconden uitgeschakeld
- na 2 seconden verandert het woord ‘submit..’ weer in ‘submit’ & de knop wordt geactiveerd (hij is niet langer uitgeschakeld)
ik heb de onderstaande code geschreven. Elk advies hierover wordt zeer op prijs gesteld
html
<form action="#" method="post">
<input type="button" name="submit" value="Submit" class="submit_wide" id="myBtn" >
</form>
javascript
$(".submit_wide").click(function () {
$(this).val('Please wait..');
$(this).attr('disabled', true);
setTimeout(function() {
$(this).attr('disabled', false);
$(this).val('Submit');
}, 2000);
});
Antwoord 1, autoriteit 100%
Het probleem is dat binnen de setTimeout()
-aanroep, this
niet naar de knop verwijst. U moet een variabele instellen om de verwijzing naar de knop te behouden.
Ik heb hieronder een voorbeeld gemaakt. Kijk hoe ik de variabele met de naam $this
gebruik.
$(".submit_wide").click(function () {
var $this = $(this);
$this.val('Please wait..');
$this.attr('disabled', true);
setTimeout(function() {
$this.attr('disabled', false);
$this.val('Submit');
}, 2000);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="button" class="submit_wide" value="Submit"/>