VBsupport перешел с домена .ORG на родной .RU
Ура!
Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей
Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже: Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота. Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
Знатокам JS, вывод в url списка значений из <select> (multiselect)
0
Борюсь в JS и вроде как удачно, но один окопчик так и не могу взять, закопались там враги....
В общем мне надо получить все выбранные значения из элемента select в режиме multiselect и передать их в php скрипт с помощью XMLHttpRequest
Как передавать тут все понятно, но вот как получить все отобранные значения и засунуть их в url...
сделал я скрипт
Code:
document.addEventListener("change", function() {make_request('ca.php?do=gm&dstart_d='+document.getElementById('dstart_date').value+'&ugs='+selectval('ugs'), 'mydiv'); }, true);
function selectval(selectid) {
var select_ed = new Array();
var mySelect = document.getElementById(selectid);
for(i=0; i <= mySelect.options.length; i++)
{
if(mySelect.options[i].selected)
{
select_ed.push(mySelect.options[i].value);
}
}
return select_ed;
}
Вроде все работает, проверял в firebug. Массиву select_ed присваиваются значения, но вот на этом и все. Тихо умирает и ничего не происходит. Никакие значения в функцию make_request() не передаются...
Правда у меня еще есть проблема, firebug говорит, что mySelect.options[i] is undefined на строке if(mySelect.options[i].selected). может в этом проблема, хотя скрипт отрабатывает правильно и значения добавляются в массив верно...
И вот еще что ставил точку останова на return, так до нее не доходит, пробовал до return сразу после цикла объявлять переменные и ставить точку останова на них, так тоже там не останавливается.
Такое впечатление, что сразу после цикла все отваливается.
SMak044,
слей с саппорта файл яваскрипта от хака объяв, там вроде именно то, что ты ищешь
ID's табов собираются в массив и из JS передаются в пхп, нЕ мультиселект, но разницы ведь нет, так, главное передать массив?
@MDM
Эксперт
Join Date: Jun 2006
Location: Петрозаводск
Posts: 249
Версия vB: 3.8.x
Пол:
Reputation:
Expert 1682
Репутация в разделе: 55
1
Quote:
Originally Posted by SMak044
Правда у меня еще есть проблема, firebug говорит, что mySelect.options[i] is undefined на строке if(mySelect.options[i].selected).
Code:
for(i=0; i <= mySelect.options.length; i++)
Должно быть не "меньше-равно", а "меньше".
Quote:
Originally Posted by SMak044
Массиву select_ed присваиваются значения, но вот на этом и все. Тихо умирает и ничего не происходит. Никакие значения в функцию make_request() не передаются...
Функция selectval() должна возвращать строку, а не массив.
Например, так:
Code:
return select_ed.join(';');
@SMak044
Эксперт
Join Date: May 2008
Награды в конкурсах:
Posts: 1,764
Версия vB: 3.8.4
Пол:
Reputation:
Expert 1707
Репутация в разделе: 132
0
kerk, MDM, Уррррааааа!
Все получилось, огромное спасибо.
Проблема была именно в ошибке mySelect.options[i] is undefined когда установил
Code:
for(i=0; i < mySelect.options.length; i++)
Цикл начал завершаться корректно и значение начало передаваться.
А вот выводить в виде строки оказалось не обязательно. Если просто передать значение в url, то там выводится через запятую именно строкой.
Огромное спасибо!
Сто лет живи, сто лет учись...!
SMak044 добавил 08.03.2012 в 10:01
Я разрабатываю управление в админке.
Как Вы знаете для вывода контролов в админке используются функции:
Как повесить action на элемент формы в html понятно, но к сожалению на функции вывода в админке action повесить нельзя.
Но отслеживать события на странице можно. Для этого в присоединяемом на странице javascript необходимо сделать следующее:
Code:
document.addEventListener("change", function() { make_request('cleana.php?do=getnum&dstart_d='+document.getElementById('dstart_date').value+'&dstart_m='+document.getElementById('dstart_month').value+'&dstart_y='+document.getElementById('dstart_year').value+cleaningpm_selectval('ugs'), 'div_count_by_del'); }, true);
document.addEventListener("keyup", function() { make_request('cleana.php?do=getnum&dstart_d='+document.getElementById('dstart_date').value+'&dstart_m='+document.getElementById('dstart_month').value+'&dstart_y='+document.getElementById('dstart_year').value+cleaningpm_selectval('ugs'), 'div_count_by_del'); }, true);
function cleaningpm_selectval(selectid) {
var select_ed = new Array();
var mySelect = document.getElementById(selectid);
for(i=0; i < mySelect.options.length; i++)
{
if(mySelect.options[i].selected)
{
select_ed.push(mySelect.options[i].value);
}
}
return select_ed;
}
....
Как результат мы получаем в форме предпросмотр результатов нашего выбора в форме админки, который выводится в <div id="div_count_by_del"></div>
Конечно можно оптимизировать это решение путем вызова промежуточной функции, где мы будем фильтровать происходящие события и делать запрос к скрипту cleana.php, только тогда, когда нам это необходимо. Или это позволит менять сам запрос или выводить в другой div.
Last edited by SMak044 : 03-08-2012 at 12:10 PM.
Reason: Добавлено сообщение
kerk
k0t
Join Date: May 2005
Location: localhost
Posts: 28,821
Версия vB: 3.8.x
Пол:
Reputation:
Гуру 20318
Репутация в разделе: 7746
1
Quote:
Originally Posted by SMak044
но к сожалению на функции вывода в админке action повесить нельзя.
можно, посмотри внимательно описание функции print_form_header()
там одним из аргуметнов, идет action="post", так вот можно сформировать вызов функции таким образом, что бы и яваскрипт свой работал по событию onsubmit="tram_pa_pam()"
примерно так:
можно, посмотри внимательно описание функции print_form_header()
там одним из аргуметнов, идет action="post", так вот можно сформировать вызов функции таким образом, что бы и яваскрипт свой работал по событию onsubmit="tram_pa_pam()"
Это да, это я видел, но тут должно произойти событие POST, то есть должна форма быть заполненной и отравленной, а вот если необходимо вывести скажем предпросмотр или рассчитать значение по введенным параметрам до того как создать форму и отправить ее на обработку.
Все это конечно можно сделать переходом на другую форму с перезагрузкой страницы.... Но мне показалось, что с ajax будет красивее и практичней.
kerk
k0t
Join Date: May 2005
Location: localhost
Posts: 28,821
Версия vB: 3.8.x
Пол:
Reputation:
Гуру 20318
Репутация в разделе: 7746
1
тогда еще проще, вешай свою функцию на онченж или другую
переменная $options содержит набор опшнов, сгенерированных функцией construct_select_options()
@SMak044
Эксперт
Join Date: May 2008
Награды в конкурсах:
Posts: 1,764
Версия vB: 3.8.4
Пол:
Reputation:
Expert 1707
Репутация в разделе: 132
0
Quote:
Originally Posted by kerk
переменная $options содержит набор опшнов, сгенерированных функцией construct_select_options()
Да, но эта функция не поддерживает передачу массива значений в параметр $selectedid, в случае если необходим мультиселект, то есть если тебе необходимо передать селекту, сразу несколько опшинов с состоянием селект, то такая конструкция не годится, потому я использовал, построение селекта самостоятельно и вывод в принт_сел_ров. Так что повесить там action была не проблема, но мне надо было сделать поля выбора двух дат, и я использовал для этого очень полезную функцию print_time_row, которая создает сразу 4 полей ввода, 1 селект и 1 объект вызова интерактивного календаря.
На эти элементы повесить actions не получится, конечно можно сверстать все самому и просто вывести как html..... Но можно пойти и по пути мониторинга событий.
kerk
k0t
Join Date: May 2005
Location: localhost
Posts: 28,821
Версия vB: 3.8.x
Пол:
Reputation:
Гуру 20318
Репутация в разделе: 7746
1
Quote:
Originally Posted by SMak044
эта функция не поддерживает передачу массива значений
что укажешь, то и будет передано =)
в селекте name указать как массив name="select[]"
и потом отлавливать нажатия мыши по опшнам, своим яваскриптом