Cette question a pour but de développer des plugins jQuery et d'autres extraits JavaScript autonomes qui ne nécessitent pas de modifier d'autres fichiers script pour des raisons de compatibilité.
Nous savons tous que event.preventDefault() empêchera l'événement par défaut afin que nous puissions exécuter une fonction personnalisée. Mais que se passe-t-il si nous voulons simplement retarder l'événement par défaut avant de l'invoquer ? J'ai vu plusieurs astuces de ninja et de contournement pour ré-invoquer l'action par défaut, mais comme je l'ai dit, je suis intéressé par un moyen universel de redéclencher l'événement par défaut, et non pas de traiter les déclencheurs par défaut au cas par cas.
$(submitButton).click(function (e) {
e.preventDefault();
// Do custom code here.
e.invokeDefault(); // Imaginary... :(
});
Même pour quelque chose d'aussi simple que la soumission d'un formulaire, il ne semble pas y avoir de réponse universelle. Le site $(selector).closest("form").submit()
suppose que l'action par défaut est une soumission de formulaire standard, et non pas quelque chose de farfelu comme une __doPostBack()
dans ASP.NET. Jusqu'à la fin de l'invocation des callbacks ASP.NET, c'est ce qui se rapproche le plus d'une solution universelle, du genre "on met tout en place et on oublie tout" :
$(submitButton).click(function (e) {
e.preventDefault();
// Do custom code here.
var javascriptCommand = e.currentTarget.attributes.href.nodeValue;
evalLinkJs(javascriptCommand);
});
function evalLinkJs(link) {
// Eat it, Crockford. :)
eval(link.replace(/^javascript:/g, ""));
}
Je suppose que je pourrais commencer à écrire des cas spéciaux pour gérer des liens normaux avec un window.location
rediriger, mais alors nous ouvrons une toute nouvelle boîte de Pandore - empiler de plus en plus de cas pour l'invocation d'événements par défaut crée plus de problèmes que de solutions.
Alors, qu'en pensez-vous ? Qui a la solution magique que je cherche ?
2 votes
Je ne comprends pas vraiment ce que tu essaies de faire... le code du gestionnaire d'événement n'exécute-t-il pas avant l'action par défaut se produit (par exemple, un
submit
le code du gestionnaire d'événement s'exécutera avant que le formulaire ne soit réellement soumis... n'est-ce pas ce que vous essayez d'obtenir ?)2 votes
Votre code personnalisé est-il asynchrone ? Cela pourrait expliquer pourquoi vous pensez avoir besoin d'une telle méthode, mais même si vous disposez de cette méthode imaginaire, cela ne résoudra pas votre problème.
1 votes
Tu as vraiment besoin d'être plus clair sur ce que tu veux. Si vous voulez exécuter du code dans le gestionnaire, ce code s'exécute de toute façon avant le comportement "par défaut".
0 votes
preventDefault
empêche l'action par défaut. Si vous voulez que l'action par défaut se produise, ne l'empêchez pas. Cela semble assez évident.1 votes
Peut-être que @Jake veut dire quelque chose de plus comme ce