Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Обработка Select (https://javascript.ru/forum/dom-window/3278-obrabotka-select.html)

Oleg_Antonov 03.04.2009 02:02

Обработка Select
 
Есть два вопроса по select
Вопрос 1. Мне нужно забрать выбранное значение в селекте и потом вывести его в определенном месте страницы. Делаю так:
var z=document.cart_quantity.nameSelect.value;
В таком виде все работает отлично, значение получаю. Проблема в том, что скрипт может генерировать несколько селектов на странице. И какой-то веселый программист не придумал ничего лучше чем присваивать им имена вида:
id[1] - первый селект, id[2] - второй, и т.д.
Забирать значения у селекта так: var z=document.cart_quantity.id[1].value; не получается. Т.к. ява думает, что это значение массива. Присваивание значения массиву результата также не дало.
Есть какой-то выход из данной ситуации? Изменить вид вывода имени селекта - плохой вариант, т.к. это движок магазина и придется ковырять кучу скриптов куда передаются значения.

Вопрос 2. Как сделать, чтобы при загрузке страницы в определнном месте уже выводилось первое значение селекта?
Строго не судите. С JS общаюсь второй день. :rolleyes:

x-yuri 03.04.2009 04:06

1) document.cart_quantity.elements['id[1]'].value
2) находишь select (проверяешь, что он уже существует если надо); достаешь из него первое значение; вставляешь его куда надо

Oleg_Antonov 03.04.2009 14:27

не понял про второй вопрос. Можно немного поподробнее?
По поводу первого - все заработало "на ура"! Огромное спасибо! :dance:

x-yuri 03.04.2009 17:24

я тоже про второй вопрос не понял скорее всего, поэтому написал как понял

Oleg_Antonov 03.04.2009 17:49

Там какой смысл. Это сайт интернет-магазин.
Для товара есть разные атрибуты. Допустим человек может выбрать цвет одежды. В зависимости от выбора цвета - меняется цена товара (основная цена + цена за цвет). Когда страница загружается цена не показывается, т.к. скрипт не знает какой цвет выбран. Цена появляется только после выбора цвета товара из селекта. Причем сразу первое значение его почему-то выбрать невозможно.

x-yuri 03.04.2009 17:55

часть браузеров сами выберут первое значение (насколько я помню), для остальных добавляешь selected к первому элементу. Разве не работает?

Oleg_Antonov 03.04.2009 18:01

С selected не получится. Список формирует php функция. Она также формирует все остальные выпадающие менюхи на сайте. Сделать тупо другую функцию - тоже не вариант. Если делаешь другую - товары не отправляются в корзину, при оформлении заказа невидно выбранных атрибутов и т.д. Тоесть при смене функции придется ковырять много скриптов и править их.
Была у меня идея сделать через onLoad запуск функции передающий текущее значение селекта, но в IE всплывает окошко "заблокировать небезопасный элемент?" Хотелось бы без этого, т.к. большинство народа ткнет да, и тем самым цену на товар не увидят.

x-yuri 03.04.2009 19:55

в большинстве случаев "выбирать" пункт с помощью php - самый лучший вариант. У тебя я пока не заметил причин делать это с помощью javascript

Oleg_Antonov 04.04.2009 22:20

Спасибо. Решил те проблемы. Осталась последняя и самая глупая. Но мозг у меня уже кипит, поэтому придумать как реализовать не могу.
Задача:
function rePrice(){
var priceO="1200 руб."; //вывод цены "по умолчанию"
var priceOld=parseFloat(priceOld);
var a3 = [0.0000, "-"]; //вывод массива с элементами для 1ого атрибута
var a4 = [600.0000, "+"]; //вывод массива с элементами для 2ого атрибута
var z=document.cart_quantity.elements['id[1]'].value; //передача значения из select
var newPrice=priceOld + a.z[0]; // складавание цены "по умолчанию" и цены выбранного через селект атрибута
var myElement = document.getElementById("newBlock");
myElement.innerHTML = newPrice;}

Подскажите как в строке var newPrice=priceOld + a.z[0]; выводить значение "z". Или может какой-то более лучший способ получения данных атрибутов, с последующим складыванием их с начальной ценой.
:(

x-yuri 05.04.2009 00:59

не знаю, что у тебя там a и z, но у элементов формы есть атрибут value
p.s. стоит еще делать проверки, что в полях указана корректная информация


Часовой пояс GMT +3, время: 19:48.