Esta pregunta tiene el propósito de desarrollar complementos de jQuery y otros fragmentos de código JavaScript independientes que no requieren la modificación de otros archivos de guiones para garantizar la compatibilidad.¿Existe una forma [universal] de invocar una acción predeterminada después de llamar a event.preventDefault()?
Todos sabemos que event.preventDefault() evitará el evento predeterminado para que podamos ejecutar una función personalizada. Pero, ¿y si queremos simplemente demorar el evento predeterminado antes de invocarlo? He visto varios trucos ninja específicos de casos y soluciones para volver a invocar la acción predeterminada, pero como dije, mi interés está en una forma universal de volver a activar el valor predeterminado, y no tratar los desencadenantes predeterminados en un caso- por caso.
$(submitButton).click(function (e) {
e.preventDefault();
// Do custom code here.
e.invokeDefault(); // Imaginary... :(
});
Incluso para algo tan simple como el envío de formularios, parece que no hay una respuesta universal. La solución $(selector).closest("form").submit()
supone que la acción predeterminada es un envío de formulario estándar y no es algo raro como una función __doPostBack()
en ASP.NET. Para el final de la invocación de devoluciones de llamada ASP.NET, esto es lo más cerca que he llegado a una solución universal, set-él-y-olvidar-es:
$(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, ""));
}
supongo que podría empezar a escribir casos especiales para manejar enlaces normales con un redireccionamiento window.location
, pero luego estamos abriendo una nueva lata de gusanos: acumular más y más casos para la invocación de eventos predeterminados crea más problemas que las soluciones.
¿Qué tal? ¿Quién tiene la bala mágica que he estado buscando?
Realmente no entiendo lo que estás tratando de hacer ... no lo hace el evento código de controlador ejecute * antes * la acción predeterminada ocurre (por ejemplo, se ejecutará un código del controlador de evento 'submit' antes de que se envíe el formulario ... ¿no es eso lo que intenta lograr?) –
¿Su código personalizado es asincrónico? esto podría explicar por qué sientes que necesitas tal método, pero incluso tener ese método imaginario no resolverá tu problema. – agradl
Definitivamente debe ser más claro sobre lo que quiere. Si desea ejecutar código dentro del controlador, ese código se ejecuta antes del comportamiento "predeterminado" de todos modos. –