|
|
|
| Доброго времени суток!
Задача: есть форма: поле формы SELECT и пара полей TEXT (TEXTAREA). В поле SELECT выводится список из базы (названия товаров, например). При выборе соотв. товара в этом поле, в остальных полях должны отобразиться его описания.
Я подумал, что при первой загрузке страницы нужно считать из базы и поместить в массив JS значения id - название -описание, затем при выборе значенияв поле SELECT по событию onChange и id присваивать переменным НАЗВАНИЕ и ОПИСАНИЕ значения из массива и выводить их в соотв. полях TEXT .
с php и базой проблем нет, а JS я только начинаю учить, кто может помочь? Конкретно, интересует занесение в масив данных, полученных из php и вывод значений массива в поле <..=TEXT VALUE=...>. | |
|
|
|
|
|
|
|
для: denvor
(09.11.2005 в 12:10)
| | Можно попробовать динамически подтягивать данные из базы основываясь на выборе в select.
Посмотрите здесь: http://www.dklab.ru/lib/Subsys_JsHttpRequest/
Только сразу не убегайте. Всё не так сложно как кажется с первого раза. А полученный эфеект стоит пары часов изучения. | |
|
|
|
|
|
|
|
для: Axxil
(09.11.2005 в 12:50)
| | Спасибо, сейчас посмотрю. Пока же попробовал в массив JS вставить данные из базы - и с удивлением обнаружил, что php-код в тэгах <script> не интерпретировался! Это так и должно быть? а как же тогда передавать данные из php в JS?
Пошел смотреть статью... | |
|
|
|
|
|
|
|
для: denvor
(09.11.2005 в 13:01)
| | Данные передают обычно через параметры функций:
<script>
function somefunc(var1,var2){
// тело функции
}
</script>
<a href="" onclick="somefunc(<?=$var1?>,<?=$var2?>)">
|
| |
|
|
|
|
|
|
|
для: Axxil
(09.11.2005 в 12:50)
| | Если при первой загрузке все значения загрузить можно, то не надо сложностей с подтягиванием. В этом ведь есть недостаток, связанный с постоянной необходимостью быть в онлайне. Да ещё зачем denvor -у изучать сразу верхние этажи программирования на JS? Надо просто объявить константы в массиве через РНР.
<script>A=new Array("<?=$value1?>","<?=$value2?>","<?=$value3?>", ... и т.д.... );</script>
| а затем сделать выбор через JS.
<select onClick=document.getElementById('txt').value=A[event.srcElement.selectedIndex]>
<option>1th</option>
<option>2th</option>
<option>3th</option>
</select><br>
<input id=txt>
|
| |
|
|
|
|
|
|
|
для: 12345
(09.11.2005 в 13:24)
| | Нет, оно понятно когда 10-20 товаров в базе. А когда их тысячи...
Что будем делать массив на 10000 элементов?
Согласен в одном если скрипт простой и база небольшая то так лучше.
А изучать там в принципе нечего все библиотеки написаны и работают, подключай и пользуйся. | |
|
|
|
|
|
|
|
для: Axxil
(09.11.2005 в 13:51)
| | > Что будем делать массив на 10000 элементов?
Тогда подгружать. (Но 10000 и в SELECT не поместятся.) | |
|
|
|
|
|
|
|
для: 12345
(09.11.2005 в 14:13)
| | статья классная - я обязательно найду время попробовать. 12345 прав - у меня всего несколько позиций, так что проще оказалось сразу подтянуть все в массивы - с этим я справился. (Правда, загвоздка оказалось в том, что php в <script> у меня НЕ РАБОТАЕТ (это - нормально?). Не сработало даже src="...php"/ Пришлось генерировать весь JS -код в php).
Теперь вторая чать задачи вывод элемента массива: после выбора в поле <SELECT> вызывается функция, которой передается VALUE. По этому значению нужно вывести в соседнее поле TEXT элемент массива.
<select name="menu1" onChange="viewValue('parent',this,0)">
<option value="arr0">000</option>
<option value="arr1">111</option>
<option value="arr2">222</option>
|
те.при выборе 111 передается имя массива (arr1 ) и некий элемент этого массива нужно вывести в соседнее поле. И еще: что это за параметры функции parent и this ? (нолик еще затесался откуда-то)
Итак: как вывести?
PS спасибо за помощь :) | |
|
|
|
|
|
|
|
для: denvor
(09.11.2005 в 19:58)
| | > php в <script> у меня НЕ РАБОТАЕТ
не нормально.
Может, у тебя не работала сокращённая конструкция <?=...;?> ? А так рнр должен быть совершенно независим от тегов.
'parent' - это просто строка. Возможно, с помощью неё затем обращаются к 'parent' - окну, вызвавшему данное окно.
this - типичная ссылка на тег, в котором происходит выполнение JS - на select.
0 - см.тело функции.
Как вывести? А как элемент массива вычисляется?
В общем, пример вывода я дал выше. А выбор value, от которого в примере я избавился, делается:
event.srcElement[event.srcElement.selectedIndex].value
При этом я не использовал параметр this, который в теге select равен event.srcElement, но в теле функции его (this) уже не применишь (только через параметр, как в твоём примере).
Итого, чтобы вызвать элемент массива, надо
document.getElementById('txt').value=
eval(event.srcElement[event.srcElement.selectedIndex].value+"["+(вписать_индекс_элемента)+"]");
| где txt - id тега input. (<input id=txt>) | |
|
|
|
|
|
|
|
для: denvor
(09.11.2005 в 12:10)
| | если я правильно понял то надо чтото типа етого:
..присоединяемся к базе
echo "<Form name='name'>
<Select Name='sel' Size='1'
OnChange='window.parent.(имя фрейма или чтото другое).location.href = this.options[this.selectedIndex].value;'>
<Option selected value=''>товары ...</Option>";
$result = mysql_query("SELECT * FROM 'tovar'");
$num_results=mysql_num_rows($result);
for ($p = 0; $p < $num_results; $p++)
{
$myrow=mysql_fetch_array($result);
echo"<Option value=name_script.php?tovar=".$myrow['id'].">".$myrow['tovar']."</Option>";
}
echo "</Select></Form>";
......
|
| |
|
|
|
|
|
|
|
для: Кирилл
(09.11.2005 в 20:16)
| | не совсем. Нужно вывести без перезагрузки страницы, средствами JS. Данные для работы уже загружены в массивы из базы.
почти все сделал, одна загвоздка: эта функция
function showValue(catName){
var catValue;
var catValue2;
catValue = catName.options[catName.selectedIndex].value;
catValue2 = 'cat' + catValue + '[1]';
objText = document.forms[0].elements['text'];
objText.value = catValue2;
|
получает номер пункта SELECT и формирует название элемента массива (например, при цифре 0 выводится cat0[1]). Элементы массива и их значения определены. Так вот, вместо вывода ЗНАЧЕНИЯ элемента массива выводится НАЗВАНИЕ ПЕРЕМЕННОЙ (в данном случае - cat0[1])
в php можно было бы написать $cat$num и при $num = 0 была бы переменная $cat0. А как в JS дать понять, что мне нужно значение. а не название переменной? | |
|
|
|