Вы вызываете event.preventDefault();
в вашем обработчике кликов, но нигде не определена переменная event
, так что, я думаю, вы получите ошибку javascipt. Кстати, вы смотрели на консоль вашего инструмента отладки JavaScript?
Может быть, вы хотели, чтобы ваш обработчик кликов воспринимал это как аргумент:
$("#process-payment").click(function (evt) {
evt.preventDefault();
...
});
Но я бы порекомендовал вам подписаться на событие отправки формы, а не на обработчик нажатия кнопки отправки. Это будет, например, учитывать тот случай, когда пользователь нажимает Enter, когда внутри какого-либо поля ввода, чтобы отправить форму, вместо нажатия на кнопку отправки.
Также правильный способ проверки правильности формы - form.valid()
, а не form.validate()
, как в вашем примере. В дополнение к этому вам не нужно вызывать $.validator.unobtrusive.parse
, если вы не обновляете DOM с помощью новая форма, скажем, например, вызов AJAX. В этом случае вы должны вызывать это в обратном вызове успеха после того, как вы заменили DOM новыми элементами формы, чтобы проанализировать новые ненавязчивые правила проверки.
Итак:
$('#card-payment').submit(function(evt) {
evt.preventDefault();
var form = $(this);
if (form.valid()) {
$.ajax({
url: this.action,
type: this.method,
data: form.serialize(),
success: function (result) {
console.log(result);
},
error: function (jqXhr, textStatus, errorThrown) {
alert("Error '" + jqXhr.status + "' (textStatus: '" + textStatus + "', errorThrown: '" + errorThrown + "')");
},
complete: function () {
// $("#ProgressDialog").dialog("close");
}
});
} else {
console.log("invalid");
}
});