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. стоит еще делать проверки, что в полях указана корректная информация

Oleg_Antonov 05.04.2009 01:04

Понимаешь, селект формирует скрипт пхп. У каждого <option> свой value. Например для товара есть два возможных варианта. <option> будут с value равными например 2 и 3.
Через php я из базы вытаскиваю какая цена для этого товара соответствует value 2 и 3. Записываю это дело в массив.
Когда человек выбирает атрибут из списка, скрипт получает value <option>, ищет какой массив ему соответствует. Вытаскивает из этого массива данные и дальше работает с ними.
P.S. Значения выпадающего меню формирует скрипт. Сам пользователь не в какие поля данные не вводит. Зачем какая-то проверка?

x-yuri 05.04.2009 01:48

сорри, я туплю - проверка для select, естественно, не нужна
потом:
1) если a - это твой массив, то будет что-то типа a[z] (если там только цена хранится)
2) вместо создания внешнего массива (если не xhtml) можно создавать свои атрибуты (со своим названием, например, price), в которых и хранить допольнительную информацию

Oleg_Antonov 05.04.2009 16:26

В массиве хранится два значения. Первое число - цена, второе строка - "+" или "-". Дальше я буду по нему проверять что делать с первым значением, прибавлять или вычитать из главной цены. Получается массивы вот такого вида:
var a3 = [0.0000, "-"];

var priceOld = 1000;
var newPrice=priceOld + a.z[0];
Не работает последняя строчка. Как правильно написать, чтобы в переменную newPrice попадала сумма переменной priceOld и первое значение массива а3? такой вариант: var newPrice=priceOld + a3[0]; конечно работает, но проблема в том, что цифра после буквы a (в данном случае 3) это значение переменной, в которую помещается value выбранного пункта в селект.

x-yuri 05.04.2009 16:37

а зачем тебе отдельно цена и отдельно знак?
p.s. a.z[0] значает 0-ой элемент массива, который содержится в свойстве с именем z объекта a

Oleg_Antonov 05.04.2009 19:24

Будет условие если "-" отнять добавочную стоимость из основной цены, "+" добавить.
Так как лучще сделать? Может как-то формировать массив по-другому?

x-yuri 06.04.2009 08:48

я так и не понял, почему нужно отедельно знак хранить
но если нужно, то твоя ошибка в том, что a[z] это не то же самое, что a['z'] (или a.z)

SureGOOD 15.05.2009 20:04

Не разберусь(
 
у меня чего то не работает, в JS очень не силен(
var z=document.cart_quantity.nameSelect.value;
выдает document.cart_quantity is undefined
отсюда вопрос, что такое cart_quantity? пробовал присваивать форме id и подставлять вместо cart_quantity, но пишет ту же ошибку, только подставляет мое имя формы...

x-yuri 16.05.2009 03:23

name формы


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