Questa domanda ha lo scopo di sviluppare plugin jQuery e altri snippet JavaScript autonomi che non richiedono la modifica di altri file di script per la compatibilità.Esiste un modo [universale] per richiamare un'azione predefinita dopo aver chiamato event.preventDefault()?
Sappiamo tutti che event.preventDefault() impedirà l'evento predefinito in modo che possiamo eseguire una funzione personalizzata. Ma cosa succede se vogliamo semplicemente ritardare l'evento predefinito prima di richiamarlo? Ho visto vari trucchi ninja specifici del caso e soluzioni alternative per ri-richiamare l'azione predefinita, ma come ho detto, il mio interesse è in un modo universale per riattivare l'impostazione predefinita e non gestire i trigger predefiniti su un caso caso per caso.
$(submitButton).click(function (e) {
e.preventDefault();
// Do custom code here.
e.invokeDefault(); // Imaginary... :(
});
Anche per qualcosa di semplice come la presentazione del modulo, non sembra esserci una risposta universale. La soluzione alternativa $(selector).closest("form").submit()
presuppone che l'azione predefinita sia l'invio di un modulo standard e non qualcosa di stravagante come una funzione __doPostBack()
in ASP.NET. Alla fine di invocare callback ASP.NET, questo è il più vicino Sono venuto a un universale, la soluzione-it-and-forget-it set:
$(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, ""));
}
Suppongo che potrei iniziare a scrivere casi speciali da gestire collegamenti normali con un reindirizzamento window.location
, ma poi stiamo aprendo una nuova lattina di worm - accumulando sempre più casi per il richiamo di un evento predefinito crea più problemi che soluzioni.
Quindi che ne dici? Chi ha il proiettile magico che stavo cercando?
Io davvero non capisco quello che stai cercando di fare ... non lo fa l'evento codice di esecuzione eseguito * prima * si verifica l'azione predefinita (ad es. il codice del gestore di eventi 'submit' verrà eseguito prima che il modulo sia effettivamente inviato ... non è quello che stai cercando di ottenere?) –
Il tuo codice personalizzato è asincrono? questo potrebbe spiegare perché ritieni di aver bisogno di un tale metodo, ma anche avere quel metodo immaginario non risolverà il tuo problema. – agradl
Hai sicuramente bisogno di essere più chiaro su ciò che vuoi. Se si desidera eseguire il codice all'interno del gestore, tale codice viene comunque eseguito prima del comportamento "predefinito". –