element val() после ajax
Добрый день, уважаемые участники форума, специалисты!
имеем: Тело документа, обновляемое по событиям(суть обновления - загрузка нужного шаблона страницы, то есть, наполнение <div> контентом нужного мне шаблона, а так же, передача данных от пользователя в систему посредством $_POST, валидация данных, и, в случае успешной валидации - запись данных в переменную $_SESSION). Пример события: Пользователь ввел две переменных, после этого, система, проверив данные, сделала выборку из БД, и предоставила результаты в виде селекта, с опциями - строками бд(идентификаторы), выбрав из списка нужный идентификатор, пользователь получает полную выписку. В случае, если результаты пустые/не те, пользователь нажимает назад, после чего подгружается предыдущий шаблон, где он может повторить ввод данных. Ввод данных и выборки опций происходят в диалоговом окне. Суть проблемы: При попытке повторного ввода данных, в переменной $_POST['account'] не передается ничего, т.е. пусто. Диалоговое окно:
$(".dialog").dialog({
modal: true,
autoOpen: false,
width: 450,
show: {
effect: "fade",
duration: 700
},
hide: {
effect: "fade",
duration: 200
}
});
<div class="dialog" title="Укажите данные">
<div class="dialog-content">
<label for="val1-code">Введите Val1:</label>
<input type='number' name='val1' id="val1-code" />
<br>
<label for="val2-code">Введите Val2:</label>
<input type='number' name='val2' id="val2-code" />
<div class="my-but select-button disabled">Отправить</div>
</div>
</div>
Получение данных:
$(document).on('click', '.select-button', (function () {
if ($(this).hasClass('enabled'))
{
var value = $('#cons-list').children('option:selected').val();
if (consignee != '') {
$("#page-preloader").fadeIn(800);
$(".dialog").dialog('close');
jQuery.ajax({
type: 'POST',
url: URL,
data: {
'action': 'validateAndShow',
'value': '' + value
},
success: function (data) {
$('.result').html(data);
$("#page-preloader").fadeOut(800);
}
})
} else {
alert('empty!');
}
}
else
{
return false;
}
})
Пример селекта, после получения данных от пользователя.
<select id="cons-list">
<option readonly=""></option>
<option value="val1">Text1</option>
<option value="val2">Text2</option>
</select>
Напомню, проблема при повторной отправке. Смотрю в сторону того, что искать значения не на
$(document).ready(function(){
})
а на
$(document).on('change', function(){
})
Прошу помощи. |
Syfer43, ты сам потестировать свой скрип можешь?
Посмотри, что ты там отправляешь... И отправляешь ли вообще... |
Цитата:
там и алерт на этот счет стоит, если приглядеться) |
Цитата:
Значение может быть "пусто" если селектор у тебя не правильный и не находит нужный тебе элемент... |
Цитата:
|
Цитата:
var value = $('#cons-list').val();
|
Цитата:
Цитата:
value = consignee Цитата:
и еще момент, первый раз значение берется верно. не срабатывает только повторно и третий раз и т.д. |
Цитата:
|
Цитата:
Сделал так. как вы предложили:
$(document).on('click', '.select-button', (function () {
if ($(this).hasClass('enabled'))
{
var value = $('#cons-list').val();
if (value != '') {
$("#page-preloader").fadeIn(800);
$(".dialog").dialog('close');
jQuery.ajax({
type: 'POST',
url: URL,
data: {
'action': 'validateAndShow',
'value': '' + value
},
success: function (data) {
$('.result').html(data);
$("#page-preloader").fadeOut(800);
}
})
} else {
alert('empty!');
}
}
else
{
return false;
}
})
результат тот же. Первый раз данные отправляются нормально, второй раз value = ''. при этом. оба раза селект идентичный:
<select id="cons-list">
<option readonly=""></option>
<option value="val1">val1</option>
<option value="val2">val2</option>
</select>
|
$(document).on('click', '.select-button.enabled)', (function () {
И не надо проверять if ($(this).hasClass('enabled')). В остальном либо с логикой у вас не так, либо есть ошибка. Ибо если отправляется пустое значение, то как же тогда if (value != '')? Кстати, просто if(value) ... |
Цитата:
сделал так:
$(document).on('change', '#cons-list', function () {
var value = $('#cons-list').val();
if (value ) {
$("#page-preloader").fadeIn(800);
$(".dialog").dialog('close');
jQuery.ajax({
type: 'POST',
url: URL,
data: {
'action': 'validateAndShow',
'value': '' + value
},
success: function (data) {
$('.result').html(data);
$("#page-preloader").fadeOut(800);
}
})
}
})
вывожу все на пхп: print_r($_POST); первый результат: Array ( [action] => validateAndShow [value] => value) второй: Array ( [action] => validateAndShow [value] => ) |
Я не знаю чего вы там делаете, поэтому не будут гадать чего у вас не так, ибо полного представления нет чего и как. Могу только заметить следующее - если получаемый список после первичного запроса заменяет предыдущий, то делегирование обработки его события по его ID, это нормально. Но если получаемый список добавляется в документ как новый список, но это уже ошибка.
Еще можно сказать, что 'value': '' + value - никчемное. |
Цитата:
"чего" я "там" делаю - описано в теме. Не понятно что-то конкретное? уточните/спросите, постараюсь донести/объяснить/показать. Про никчемное - не понял. если имеете ввиду то, что '' + <- вот это лишнее, ну что ж, давайте уберу, если глаза Вам режет. Давайте оставаться людьми. [/OFFTOP] по теме: пресловутый проблемный "список" - он же селект, это результат вывода массива из бд со своими ид в атрибутах value. список этот выводится внутри тела тега див с ид="dialog-content", то есть, контент окна-диалога($('.dialog')). и в первый и во второй раз - это единственный тег селект с ид = "cons-list", но, в первый и во второй раз - значения там разные. |
Syfer43,
все что рассказано еще не дает представления о том, что творится на странице. Не понятно почему '' + значение списка, это никчемное занятие? А зачем к значению списка добавлять пустую строку перед отправкой его на сервер? $('body').on('change', '#cons-list', function () { - делегировать нужно ближайшему родителю if (this.value) { - отправление будет только в том случае, если выбрана опция с непустым значением - value="" - только так, а не так value=" " или value="0", ибо в последнем случае тогда if (+this.value) и отправляемые данные data: { 'action': 'validateAndShow', 'value': this.value }, То есть у вас вообще не должно быть отправки, если пустое значение, а у вас то есть отправление! Ну так добавьте в код проверку и узнаете причину: $('body').on('change', '#cons-list', function () { console.log(this.value) |
Вангую, что не зря вы ругались на код, который был фекальным. переписал скрипт, разделил, использовал все наставления - работает. Спасибо!
|
<select>
<option selected disabled>Select...</option>
<option value="1">AAAAA</option>
<option value="2">BBBBB</option>
</select>
Попробуйте выбрать первую опцию. То есть событие списка будет наступать только при выборе опции со значением, а значит нет необходимости и проверять - if (this.value) |
да, спасибо! Вы очень помогли!
|
| Часовой пояс GMT +3, время: 13:14. |