2011-11-21 7 views

Respuesta

3

Secuestrar el botón hacer clic para enviar formularios mediante JavaScript.

aquí es bueno ejemplo con jQuery:

$("#MyButton").click(function(e) { 

    //submit your form manually here 
    e.preventDefault(); 
}); 
14

I adjunto un controlador de eventos a ciertos botones, que alteró la configuración del objeto validador en ese formulario particular.

$(".jsCancel").click(function (e) { 
    $(e.currentTarget).closest("form").validate().settings.ignore = "*" 
}); 

Esto ha funcionado como un encanto para mí en MVC3.

No sé si esto lo ayuda en particular, pero como uso un formulario ajax, tuve que adjuntar el evento a estos botones cada vez que se reemplazó el contenido del formulario ajax, utilizando el evento ajax success. El código completo que reparses el formulario y adjunta el evento para cancelar los botones es:

$(document).ajaxSuccess(function (event, xhr, settings) { 
    var $jQval = $.validator, adapters, data_validation = "unobtrusiveValidation"; 
    $jQval.unobtrusive.parse(document); 
    $(".jsCancel").click(function (e) { 
     $(e.currentTarget).closest("form").validate().settings.ignore = "*" 
    }); 
}); 
+0

Gracias. He resuelto este problema agregando la clase "cancelar" a mi botón cuando se generó el contenido. Tengo una pregunta para ti ¿Qué significa este selector ".jsCancel"? ¿Y trataste de usar este $ (". JsCancel"). Live ("clic", ... en cambio este $ (". JsCancel"). Click (función (e) ... – Sergii

+0

Añadiendo la clase cancel no trabajo para mí, por lo tanto, mi trabajo alternativo.Por lo general, prefijo las clases CSS con js, si se utilizan para encontrar elementos en lugar de estilo. Puse esa clase en mis botones de envío que no deberían validar la forma. Supongo que en vivo () o on() también funcionaría, simplemente no estoy acostumbrado a usarlo. – Skymt

1

Esto es realmente un comentario a la respuesta por tugberk, pero los comentarios no muestran ejemplos de código muy bien.

A algunas versiones de navegador no les gusta la función "preventDefault()". Después de ser mordido por esto unas cuantas veces, he añadido un simple función de utilidad:

//Function to prevent Default Events 
function preventDefaultEvents(e) 
{ 
    if (e.preventDefault) { 
     e.preventDefault(); 
    } else { 
     e.returnValue = false; 
    } 
} 

que lo haga en lugar de "preventDefault" de esta manera:

$("#CancelButton").on("click", function(event) { 
    preventDefaultEvents(event); 
    return false; 
}); 
1

puede utilizar "cancelar" clase CSS . Ex: <input type="submit" value="Cancel" name="Cancel" class="cancel" />

JQuery.Validate manejar el resto en el siguiente código:

// allow suppresing validation by adding a cancel class to the submit button 
this.find("input, button").filter(".cancel").click(function() { 
    validator.cancelSubmit = true; 
}); 
Cuestiones relacionadas