#javascript #jquery
Вопрос:
У меня есть флажок этой категории, где, если я выберу определенные значения, он будет отображаться div size
, но также в то же время, когда я установлю флажок, он отправит форму. Проблема в том , что если я добавлю this.form.submit()
, приведенный ниже код не будет работать, и форма не отправит значение, но если я его не добавлю, код будет работать. Как мне отобразить размер div и отправить форму одновременно?
function getIds(checkboxName) {
let checkBoxes = document.getElementsByName(checkboxName);
let ids = Array.prototype.slice.call(checkBoxes)
.filter(ch => ch.checked==true)
.map(ch => ch.value);
return ids;
}
$(".category").on('change', function() {
this.form.submit();
let catIds = getIds("category[]");
$.each(catIds, function(index, value){
if (value == '1' || value == '2') {
$("#size").show();
} else if (value == '3') {
$("#size").hide();
}
});
});
Комментарии:
1. Использовать ajax для отправки формы ?
2. нет, я не использую ajax
Ответ №1:
Это звучит как гоночная проблема. Форма помещается браузером в другой поток и обрабатывается первой, прежде чем остальная часть javascript сможет завершиться.
Быстрое (но грязное) исправление для меня обычно заключается в использовании метода setTimeout ().
https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout
Таким образом, javascript может работать как по волшебству, а затем форма будет отправлена.
Комментарии:
1. форма или
#show
то, что я должен установить тайм-аут?2. Я сам не тестировал ваш код, но я думаю, что функция submit () должна быть выполнена с небольшой задержкой.