Ситуация такая. Есть форма, в ней есть кнопка, различные поля и в том числе скрытое поле input с name="queue". Вот код формы:
<form class="cme text-center" id="f-2" name="MyForm">
<div class="white big-p"><strong>Если еще остались вопросы...</strong></div>
<input data-queue="second" type="text" class="form-control" name="name" placeholder="Ваше имя">
<input data-queue="first" type="text" class="form-control" name="phone" id="phone" placeholder="Номер телефона">
<input name="type" type="hidden" value="2" />
<input name="queue" type="hidden" value=true />
<button id="send_button_s-0" data-queue="Может еще немного о себе?" class="cme-btn btn btn-danger">Заказать консультацию!</button>
<div id="alert-1" class="white mini-p"></div>
<div class="callme-result"></div>
</form>
На этой форме есть кнопка, по которой происходит вызов функции, в рамках которой есть AJAX-запрос, в колбеке которого выполняется код, считывающий/изменяющий атрибут value у поля input, о котором выше. Вот код той части функции, где делается AJAX-запрос и вызывается колбек:
jQuery.getJSON(folder + 'lib/send.php', { // отправка данных
contentType: 'text/html; charset=utf-8',
cs : cs,
os : os,
ctime : cnt,
}, function(i) {
cmeMsg(form, i.cls, i.message);
if (i.result=='success' && !Boolean($(e).closest('form').find('input[name="queue"]').val())) {
setData('callme-sent', i.time);
form.find('.cme-btn').attr('disabled', 'disabled');
dl('cmeHide', 4);
dl('cmeClr', 5);
} else if (i.result=='success' && Boolean($(e).closest('form').find('input[name="queue"]').val())) {
$(e).closest('form').find('input[name="queue"]').val("false");
$(e).parent().find('input[data-queue="first"]').each(function(){
$(this).slideToggle();
});
$(e).parent().find('input[data-queue="second"]').each(function(){
$(this).slideToggle();
});
$(e).html($(e).attr("data-queue"));
}
});
Как все должно работать: пользователь нажимает кнопку, по которой происходит обработка полей формы, и потом они отправляются на сервер в скрипт php, где происходит обработка этих полей, отправка их по почте и так далее. В этом случае код идет по ветке, где Boolean($(e).closest('form').find('input[name="queue"]').val()) будет возвращать true. После этого данное значение меняется на false, что есть в коде выше:
$(e).closest('form').find('input[name="queue"]').val("false");
И даже при просмотре в Инспекторе данное значение меняется.
Однако при повторном нажатии на кнопку пользователем после того, как он заполнит очередные поля в форме, интерпретатор доходит до условия в коде, где значение Boolean($(e).closest('form').find('input[name="queue"]').val()) по идее должно уже считаться, как false - ведь даже в Инспекторе мы видим, что это так, но вот беда - значение там опять считывается как true. Подозреваю, что тут всему виной callback и асинхронность кода, но не могу понять, как именно это влияет - ведь по идее колбек уже сто раз должен был отработать, что мы видим и в Инспекторе, и собственно по коду это тоже ожидается.
Подскажите, как победить данную проблему.