I'm facing a weird problem where I have to reach a form page via two methods: create and edit. When posting from the create URL, the same form works perfectly, but whenever I post via edit or re-create URL, the page refreshes itself and tries to post on the URL itself.
Urls are: http://localhost:8000/admin/orders/create http://localhost:8000/admin/orders/create/1234
and the code is:
$('#quote_form').validate({
rules: {
item: {
required: true,
},
quantity: {
required: true,
}
},
focusInvalid: true,
invalidHandler: function(form, validator) {
$('#' + validator.errorList[0].element.id).focus();
},
submitHandler: function() {
$('#newQuote').empty();
let dataArray = $('#quote_form').serializeArray();
let item = $('#item').val();
let customerValue = '';
if ($('#customer').val().length !== 0 && $('#customer').val() !== undefined) {
customerValue = $('#customer').val();
} else if ($('#customer_id').val().length !== 0 && $('#customer_id').val() !== undefined) {
customerValue = $('#customer_id').val();
}
dataArray.push({
name: 'customer',
value: customerValue
});
$.ajax({
url: ADMIN_AJAX_URL + "orders/create-order-session",
method: 'post',
data: dataArray,
success: function(response) {
let result = JSON.parse(response);
if (result.html != '') {
clearForm($("#quote_form"));
$('#newQuote').append(result.html);
} else {
$('.error_text').html(result.message);
$('.error_row').show();
}
}
});
}
});
I've tried to post via the submit button and form validation etc, but not bored fruit.
To prevent the default form submission behavior, pass event.preventDefault()
in your submitHandler
. The submitHandler
function receives a form parameter, so you should pass that into $(form).serializeArray()
instead of using $('#quote_form').serializeArray()
.
$('#quote_form').validate({
rules: {
item: {
required: true,
},
quantity: {
required: true,
}
},
focusInvalid: true,
invalidHandler: function(form, validator) {
$('#' + validator.errorList[0].element.id).focus();
},
submitHandler: function(form, event) {
event.preventDefault();
$('#newQuote').empty();
let dataArray = $(form).serializeArray();
let item = $('#item').val();
let customerValue = '';
if ($('#customer').val().length !== 0 && $('#customer').val() !== undefined) {
customerValue = $('#customer').val();
} else if ($('#customer_id').val().length !== 0 && $('#customer_id').val() !== undefined) {
customerValue = $('#customer_id').val();
}
dataArray.push({
name: 'customer',
value: customerValue
});
$.ajax({
url: ADMIN_AJAX_URL + "orders/create-order-session",
method: 'post',
data: dataArray,
success: function(response) {
let result = JSON.parse(response);
if (result.html != '') {
clearForm($("#quote_form"));
$('#newQuote').append(result.html);
} else {
$('.error_text').html(result.message);
$('.error_row').show();
}
}
});
}
});