Обработка 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: |
1) document.cart_quantity.elements['id[1]'].value
2) находишь select (проверяешь, что он уже существует если надо); достаешь из него первое значение; вставляешь его куда надо |
не понял про второй вопрос. Можно немного поподробнее?
По поводу первого - все заработало "на ура"! Огромное спасибо! :dance: |
я тоже про второй вопрос не понял скорее всего, поэтому написал как понял
|
Там какой смысл. Это сайт интернет-магазин.
Для товара есть разные атрибуты. Допустим человек может выбрать цвет одежды. В зависимости от выбора цвета - меняется цена товара (основная цена + цена за цвет). Когда страница загружается цена не показывается, т.к. скрипт не знает какой цвет выбран. Цена появляется только после выбора цвета товара из селекта. Причем сразу первое значение его почему-то выбрать невозможно. |
часть браузеров сами выберут первое значение (насколько я помню), для остальных добавляешь selected к первому элементу. Разве не работает?
|
С selected не получится. Список формирует php функция. Она также формирует все остальные выпадающие менюхи на сайте. Сделать тупо другую функцию - тоже не вариант. Если делаешь другую - товары не отправляются в корзину, при оформлении заказа невидно выбранных атрибутов и т.д. Тоесть при смене функции придется ковырять много скриптов и править их.
Была у меня идея сделать через onLoad запуск функции передающий текущее значение селекта, но в IE всплывает окошко "заблокировать небезопасный элемент?" Хотелось бы без этого, т.к. большинство народа ткнет да, и тем самым цену на товар не увидят. |
в большинстве случаев "выбирать" пункт с помощью php - самый лучший вариант. У тебя я пока не заметил причин делать это с помощью javascript
|
Спасибо. Решил те проблемы. Осталась последняя и самая глупая. Но мозг у меня уже кипит, поэтому придумать как реализовать не могу.
Задача: 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". Или может какой-то более лучший способ получения данных атрибутов, с последующим складыванием их с начальной ценой. :( |
не знаю, что у тебя там a и z, но у элементов формы есть атрибут value
p.s. стоит еще делать проверки, что в полях указана корректная информация |
Понимаешь, селект формирует скрипт пхп. У каждого <option> свой value. Например для товара есть два возможных варианта. <option> будут с value равными например 2 и 3.
Через php я из базы вытаскиваю какая цена для этого товара соответствует value 2 и 3. Записываю это дело в массив. Когда человек выбирает атрибут из списка, скрипт получает value <option>, ищет какой массив ему соответствует. Вытаскивает из этого массива данные и дальше работает с ними. P.S. Значения выпадающего меню формирует скрипт. Сам пользователь не в какие поля данные не вводит. Зачем какая-то проверка? |
сорри, я туплю - проверка для select, естественно, не нужна
потом: 1) если a - это твой массив, то будет что-то типа a[z] (если там только цена хранится) 2) вместо создания внешнего массива (если не xhtml) можно создавать свои атрибуты (со своим названием, например, price), в которых и хранить допольнительную информацию |
В массиве хранится два значения. Первое число - цена, второе строка - "+" или "-". Дальше я буду по нему проверять что делать с первым значением, прибавлять или вычитать из главной цены. Получается массивы вот такого вида:
var a3 = [0.0000, "-"]; var priceOld = 1000; var newPrice=priceOld + a.z[0]; Не работает последняя строчка. Как правильно написать, чтобы в переменную newPrice попадала сумма переменной priceOld и первое значение массива а3? такой вариант: var newPrice=priceOld + a3[0]; конечно работает, но проблема в том, что цифра после буквы a (в данном случае 3) это значение переменной, в которую помещается value выбранного пункта в селект. |
а зачем тебе отдельно цена и отдельно знак?
p.s. a.z[0] значает 0-ой элемент массива, который содержится в свойстве с именем z объекта a |
Будет условие если "-" отнять добавочную стоимость из основной цены, "+" добавить.
Так как лучще сделать? Может как-то формировать массив по-другому? |
я так и не понял, почему нужно отедельно знак хранить
но если нужно, то твоя ошибка в том, что a[z] это не то же самое, что a['z'] (или a.z) |
Не разберусь(
у меня чего то не работает, в JS очень не силен(
var z=document.cart_quantity.nameSelect.value; выдает document.cart_quantity is undefined отсюда вопрос, что такое cart_quantity? пробовал присваивать форме id и подставлять вместо cart_quantity, но пишет ту же ошибку, только подставляет мое имя формы... |
name формы
|
Часовой пояс GMT +3, время: 19:09. |