11
votes

Appeler une fonction après la réinitialisation du formulaire

Y a-t-il une méthode pour moi d'appeler une fonction après avoir cliqué sur le bouton de réinitialisation dans le formulaire, et je veux dire après, de sorte que le formulaire soit d'abord réinitialisé, puis ma fonction appelée. Les bouillons d'événements normaux appelleraient ma fonction et ne réinitialisaient que le formulaire. Maintenant, je voudrais éviter de se installer afin de le faire.

Ce dont j'ai besoin, c'est appeler une fonction lorsqu'un formulaire est réinitialisé car j'utilise uniforme et uniforme doit être mis à jour lorsque les valeurs changent. P>

Pour le moment, je le fais comme ceci: P>

//Reset inputs in a form when reset button is hit  
$("button[type='reset']").live('click', function(){  
    elem = this;  
    //Sadly we need to use setTimeout to execute this after the reset has taken place  
    setTimeout(function(){  
        $.each($(elem).parents('form').find(":input"), function(){  
            $.uniform.update($(this));  
        });  
    }, 50);  
});  


2 commentaires

Pourquoi ne pas avoir votre propre réinitialiser () méthode?


Pourquoi éviter de se installer? Cette réponse suggère que c'est la meilleure façon: Stackoverflow.com/a/21641295/421243


5 Réponses :


7
votes

Les formulaires HTML ont un événement OnReset, vous pouvez ajouter votre appel à l'intérieur:

$('form').bind('reset', function() {
    $.each($(this).find(":input"), function(){  
        $.uniform.update($(this));  
    }); 
});


2 commentaires

Sur mon navigateur (Firefox 8), la liaison à réinitialiser exécute toujours le gestionnaire avant que les champs ne soient réinitialisés (violon ici ). Ce comportement est probablement requis pour prendre en charge prévendefault () sur l'événement réinitialiser.


TRUE, vous pouvez également lier à réinitialiser . N'apparaît pas d'une ou une autre manière des incendies après que la réinitialisation soit terminée et de doute qu'il y ait un moyen efficace de le faire en plus d'utiliser un délai comme il fait maintenant.



4
votes

Il y a longtemps, j'ai travaillé dans le débogage d'un plugin associé à Google IE et j'ai résolu l'erreur principale avec une truc de bulle. C'est pourquoi je pense que je pense que je pense immédiatement dans cette solution pour votre problème (bien sûr, devrait être croisé-navigateur): xxx

de cette façon, vous pouvez capturer le bouillonnement avec $ ('# capture_bubble') après la réinitialisation événement être déclenché.

Vous pouvez faire un test rapide avec: xxx

Veuillez noter: this.form.reeset (); (changement fabriqué en raison d'une observation de Jeff-Wilbert)


5 commentaires

Tandis que dans la théorie que la solution semble bonne et en regardant le journal de la console, l'effet de bulletage fonctionne dans cette réinitialisation est appelé d'abord et connecté suivi de la capture_bubble, mais le formulaire ne rétablit pas réellement lorsque le bouton de réinitialisation est cliqué et les valeurs encore rester à l'intérieur de la capture_bubble, j'ai créé un violon ici testant ceci: jsfiddle.net/awfap essentiellement je viens d'ajouter Une alerte à l'intérieur de l'événement Capture_Bubble Pour lire la valeur d'une zone d'entrée dans le formulaire uniquement après la réinitialisation a été cliquée à l'aide d'une variable booléenne.


@ Jeff-Wilbert Cet outil Jsfiddle est génial !. Veuillez vérifier http://jsfiddle.net/awfap/3/ Je viens de forcer un événement de réinitialisation. Qu'est-ce que tu penses?


Ouais jsfiddle est génial; Je viens d'en découvrir moi-même un couple il y a quelques jours d'être neuf ici moi-même. C'est génial pour tester et créer des démos de travail pour les personnes. Cela étant dit que votre nouveau changement de forçage de la réinitialisation semble fonctionner génial et dans chaque navigateur, très agréable. +1 à votre réponse


@ Jeff-Wilbert +1 merci. bonnes observations et un bon outil présenté.


Si la réinitialisation est forcée. Avez-vous besoin de bouillonnant?



7
votes

Je n'ai pas encore testé dans tous les navigateurs, mais vous pouvez faire votre propre commande dans un événement de clic: http://jsfiddle.net/vol7ron/9kcnl/1/ xxx


0 commentaires

3
votes

Vous n'avez pas besoin d'attendre 50 millisecondes. Si vous utilisez SettimeOut avec un délai d'attente de zéro, cela signifie efficacement «pousser ce code sur la pile d'événements». Étant donné que la réinitialisation de formulaire est garantie d'abord, le code de la sécurité est garanti (les interprètes javascript bien élevés) pour avoir accès aux valeurs de formulaire que vous souhaitez (post-réinitialisation). Vous devriez pouvoir utiliser le code ci-dessous, sans culpabilité. XXX


3 commentaires

Voir window.postMessage pour un moyen plus moderne de faire ça


Je viens de rencontrer ce problème. L'événement de réinitialisation incendie avant de réinitialiser les valeurs. Je voudrais en savoir plus à ce propos. Avez-vous une idée où je pouvais lire sur ce comportement particulier?


C'est une excellente référence: développeur.mozilla.org/en- US / Docs / Apprendre / JavaScript / ...



0
votes

Essayez cette solution

Objectif:

  • Ajouter sur "Cliquez sur" Event
  • empêche l'action par défaut (réinitialisation)
  • déclencheur "RESET"
  • Exécutez le code souhaité

    Exemple: xxx


0 commentaires