2011-11-21 8 views

risposta

3

Arrestare il pulsante per l'invio del modulo tramite JavaScript.

Ecco buon esempio con jQuery:

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

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

ho attaccato un gestore di eventi alcuni pulsanti, che ha alterato le impostazioni dell'oggetto validatore in quella forma particolare.

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

Questo ha funzionato come un fascino per me in MVC3.

Non so se questo ti aiuta in particolare, ma dal momento che utilizzo il modulo ajax, ho dovuto allegare l'evento a questi pulsanti ogni volta che il contenuto del modulo ajax è stato sostituito, utilizzando l'evento ajax success. Il codice completo che reparses la forma e attribuisce l'evento per i pulsanti Annulla è:

$(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

Grazie. Ho risolto questo problema aggiungendo la classe "cancel" al mio pulsante quando i contenuti sono stati generati. Ho una domanda per te Cosa significa questo selettore ".jsCancel"? E hai provato a usare questo $ (". JsCancel"). Live ("click", ... invece questo $ (". JsCancel"). Click (function (e) ... – Sergii

+0

Aggiungendo la classe cancel non lavoro per me, quindi il mio work-around. Di solito prefixiamo le classi css con js, se sono usate per trovare elementi piuttosto che per lo styling, metto quella classe sui miei submit-buttons che non dovrebbero validare il form.) o su() funzionerebbe pure, io non sono così abituato a usarlo. – Skymt

1

Questo è veramente un commento alla risposta da tugberk, ma i commenti non mostrano esempi di codice molto bene.

Alcune versioni del browser non gradiscono la funzione "preventDefault()". Dopo essere stato morso da un paio di volte, ho aggiunto una semplice funzione di utilità:

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

lo chiami al posto di "preventDefault" come questo:

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

È possibile utilizzare "annullare" classe CSS . Es: <input type="submit" value="Cancel" name="Cancel" class="cancel" />

JQuery.Validate gestire il resto nel codice seguente:

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