Остановить форму от отправки, используя Jquery
Я пытаюсь остановить мою форму от отправки, если проверка не удается. Я попытался следовать этому предыдущему сообщению, но я не работаю для меня. Чего мне не хватает?
<input id="saveButton" type="submit" value="Save" />
<input id="cancelButton" type="button" value="Cancel" />
<script src="../../Scripts/jquery-1.4.1-vsdoc.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
$("form").submit(function (e) {
$.ajax({
url: '@Url.Action("HasJobInProgress", "ClientChoices")/',
data: { id: '@Model.ClientId' },
success: function (data) {
showMsg(data, e);
},
cache: false
});
});
});
$("#cancelButton").click(function () {
window.location = '@Url.Action("list", "default", new { clientId = Model.ClientId })';
});
$("[type=text]").focus(function () {
$(this).select();
});
function showMsg(hasCurrentJob, sender) {
if (hasCurrentJob == "True") {
alert("The current clients has a job in progress. No changes can be saved until current job completes");
if (sender != null) {
sender.preventDefault();
}
return false;
}
}
</script>
5 ответов:
опять же, AJAX является асинхронным. Таким образом, функция showMsg будет вызываться только после успешного ответа от сервера.. и форма отправки события не будет ждать, пока AJAX успеха.
перемещение
e.preventDefault();
как первая строка в обработчике щелчка.$("form").submit(function (e) { e.preventDefault(); // this will prevent from submitting the form. ...
ниже код,
Я хочу, чтобы это было разрешено HasJobInProgress == False
$(document).ready(function () { $("form").submit(function (e) { e.preventDefault(); //prevent default form submit $.ajax({ url: '@Url.Action("HasJobInProgress", "ClientChoices")/', data: { id: '@Model.ClientId' }, success: function (data) { showMsg(data); }, cache: false }); }); }); $("#cancelButton").click(function () { window.location = '@Url.Action("list", "default", new { clientId = Model.ClientId })'; }); $("[type=text]").focus(function () { $(this).select(); }); function showMsg(hasCurrentJob) { if (hasCurrentJob == "True") { alert("The current clients has a job in progress. No changes can be saved until current job completes"); return false; } else { $("form").unbind('submit').submit(); } }
использовать это :
if(e.preventDefault) e.preventDefault(); else e.returnValue = false;
Becoz e. preventDefault () не поддерживается в IE( некоторые версии ). В IE это e. returnValue = false
попробуйте код ниже. e. preventDefault () был добавлен. Это удаляет действие события по умолчанию для формы.
$(document).ready(function () { $("form").submit(function (e) { $.ajax({ url: '@Url.Action("HasJobInProgress", "ClientChoices")/', data: { id: '@Model.ClientId' }, success: function (data) { showMsg(data, e); }, cache: false }); e.preventDefault(); }); });
кроме того, вы упомянули, что хотите, чтобы форма не отправлялась под предпосылкой проверки, но я не вижу здесь проверки кода?
вот пример некоторой добавленной проверки
$(document).ready(function () { $("form").submit(function (e) { /* put your form field(s) you want to validate here, this checks if your input field of choice is blank */ if(!$('#inputID').val()){ e.preventDefault(); // This will prevent the form submission } else{ // In the event all validations pass. THEN process AJAX request. $.ajax({ url: '@Url.Action("HasJobInProgress", "ClientChoices")/', data: { id: '@Model.ClientId' }, success: function (data) { showMsg(data, e); }, cache: false }); } }); });
другой подход может быть
<script type="text/javascript"> function CheckData() { //you may want to check something here and based on that wanna return true and false from the function. if(MyStuffIsokay) return true;//will cause form to postback to server. else return false;//will cause form Not to postback to server } </script> @using (Html.BeginForm("SaveEmployee", "Employees", FormMethod.Post, new { id = "EmployeeDetailsForm" })) { ......... ......... ......... ......... <input type="submit" value= "Save Employee" onclick="return CheckData();"/> }