Après avoir cliqué sur un bouton de réinitialisation html,
<input type="reset" />
Je voudrais exécuter du code. Comment puis-je faire cela et m'assurer que le formulaire a été réinitialisé avant de le faire?
L'utilisation de setTimeout comme Ben le fait ici est préférable: https://stackoverflow.com/a/21641295/144665
$("input[type='text']").val('Hello Everybody!');
$("input[type='reset']").closest('form').on('reset', function(event) {
// executes before the form has been reset
console.log('before reset: ' + $("input[type='text']").val());
setTimeout(function() {
// executes after the form has been reset
console.log('after reset: ' + $("input[type='text']").val());
}, 1);
});
Vous voudrez peut-être restreindre ce sélecteur de formulaire au formulaire spécifique concerné, éventuellement avec un identifiant.
Fiddle Proof: http://jsfiddle.net/iambriansreed/Zh5cd/
Je n'aime pas particulièrement l'idée de lier l'événement de réinitialisation au bouton de réinitialisation au lieu du formulaire. Un formulaire peut être réinitialisé par d'autres moyens et dans ces cas, votre événement ne se déclenchera pas.
Liez plutôt la fonction à l'événement reset, mais placez-la dans un setTimeout instantané. Cela permettra de s'assurer que le formulaire est réellement réinitialisé avant d'appeler la fonction.
$('form').on('reset', function(e)
{
setTimeout(function() { /* ... */ });
});
Mise à jour: utilisez preventDefault
au lieu de return false
.
$('input[type="reset"]').click(function(evt) {
// Prevent the reset button from firing the form's reset event again
evt.preventDefault();
$(this).closest('form').get(0).reset();
// At this point your form's inputs should have their values reset
});
La suggestion est qu'au lieu d'utiliser <input type='Reset'>
, utilisez <input type = "button">
de cette façon, vous n'avez pas à arrêter le comportement par défaut du bouton reset
. Vous devez simplement ajouter l'attribut onclick
au bouton et dans la fonction, vous pouvez appeler la méthode de réinitialisation du formulaire à tout moment et contrôler le comportement à votre guise. Le code suivant illustre cela
HTML:
<input type="button" value="Limpiar" onclick="resetForm(this);"/>
JavaScript:
function resetForm(element) {
//Do what you need before reset the form
element.form.reset(); //Reset manually the form
//Do what you need after reset the form
}
Voici un exemple d'utilisation de l'événement onreset
similaire à l'utilisation habituelle de l'événement onsubmit
de l'élément de formulaire pour intercepter de cliquer sur un bouton d'envoi L’exemple onsubmit
est ajouté à des fins de clarification.
Dans votre script:
function submitForm(form){
var xhr = new XMLHttpRequest(),
data = new FormData(form);
xhr.open("POST", url, true);
xhr.onload = function(event) {
switch (event.target.status){
case 200:
onSuccess(event);
break;
default:
onError(event);
}
};
xhr.send(data);
return false;
}
function resetForm(form){
var elements = form.elements;
// set some initial values to those form elements
return false;
}
Dans votre html:
<form onsubmit="return submitForm(this);" onreset="return resetForm(this);">
<button type="submit">Save</button>
<button type="reset">Reset</button>
</form>
Réinitialisez le contenu de l'affichage lorsque vous cliquez sur le bouton de réinitialisation.
$('.custom-file-input').on('change', function(){
const $label = $(this).next('.custom-file-label');
const fileName = $(this).val().split('\\').pop();
$label.data('default', $label.html());
$label.addClass('selected').html(fileName);
});
$('form').on('reset', function(){
$('.custom-file-input').each(function(){
const $label = $(this).next('.custom-file-label');
$label.html($label.data('default'));
});
});
essayer
$('your-form').bind('reset', function() {
alert('hi');
});