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, время: 04:29. |