Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как передать значение JS массива в форму Селект
 
 автор: Silentium   (22.04.2009 в 08:32)   письмо автору
 
 

Добрый день!
есть переменная полученная с JS в виде массива, мне нужно чтобы этим массивом заполнилась Селект формы вида:

<form id="test" name="test_nm" action="">
<select id="test_sel" >
   <option value=""></option>
   ....................
</select>
</form>


вот как это сделать?

  Ответить  
 
 автор: PAT   (22.04.2009 в 08:39)   письмо автору
 
   для: Silentium   (22.04.2009 в 08:32)
 

см. код функции formSecSel () здесь

  Ответить  
 
 автор: Silentium   (22.04.2009 в 10:21)   письмо автору
 
   для: PAT   (22.04.2009 в 08:39)
 

честно говоря, я не особо разобрался:
function formSecSel (x)
{
for (var q = document.getElementById ('scnd'), j = q.options.length - 1; j >= 0; j--) q.options [j] = null;
for (var s = x.split ('|'), j = 0; j < s.length; j++)
   {
   var o = document.createElement ('option'); var t = s [j].split ('=');
   o.value = unescape (t [0]); o.text = unescape (t [1]); q.options.add (o);
   }
q.style.visibility = 'visible';
}


Здесь аргументом Х что является?

  Ответить  
 
 автор: PAT   (22.04.2009 в 13:46)   письмо автору
 
   для: Silentium   (22.04.2009 в 10:21)
 

<script>
var FIRST = new Array ('FIRSTvalue1=FIRSTtext1', 'FIRSTvalue2=FIRSTtext2', 'FIRSTvalue3=FIRSTtext3');
var SECOND = new Array ('SECONDvalue1=SECONDtext1', 'SECONDvalue2=SECONDtext2', 'SECONDvalue3=SECONDtext3');

function formSecSel (x)
{
for (var q = document.getElementById ('spis'), j = q.options.length - 1; j >= 0; j--) q.options [j] = null;
for (var j = 0; j < x.length; j++)
   {
   var o = document.createElement ('option'); var t = x [j].split ('=');
   o.value = t [0]; o.text = t [1]; q.options.add (o);
   }
q.style.display = '';

</script>

<u onclick="formSecSel (FIRST)">Сформировать список из массива FIRST</u><br>
<u onclick="formSecSel (SECOND)">Сформировать список из массива SECOND</u><hr>

<select id="spis" style="display: none"></select>
Нескромный вопрос - "вам очень тяжело жить такому бестолковому или нормально?"

  Ответить  
 
 автор: Silentium   (22.04.2009 в 16:33)   письмо автору
 
   для: PAT   (22.04.2009 в 13:46)
 

Извиняюсь, может я туплю, но при использовании
например:
<a onclick="formSecSel('namber')">Сформировать список </a><br>
                    <select id="scnd" style=" width: 45px display:none;"></select>


выдает нечто следующее
<select id="scnd" style="">
<option value="n">undefined</option>
<option value="a">undefined</option>
<option value="m">undefined</option>
<option value="b">undefined</option>
<option value="e">undefined</option>
<option value="r">undefined</option>
</select>


P.S.: В Эксплорере вообще ничего не выводится

  Ответить  
 
 автор: PAT   (22.04.2009 в 16:45)   письмо автору
 
   для: Silentium   (22.04.2009 в 16:33)
 

>"может я туплю"

Тупите-тупите, не сомневайтесь.
Во-первых, если вы уж начали разбираться с исходным скриптом, то МОГЛИ БЫ всё же дойти своим собственным умом, что в функцию передаётся СТРОКА, которая имеет разделители в виде символа |. И эти разделители "разделяют" между собою данные для будущих опшенов. Каждый из которых, в свою очередь, разделён символом =, где по левую сторону - значение value нового опшена, а по правую - значение text нового опшена.

Во-вторых, в 13:46 я уже выложил здесь вам версию, где в качестве аргумента функции передаётся не строка (кою внутри функции ранее "разделялась" на элементы массива), а уже готовый массив (где отдельные элементы массива представляют из себя пары "value=text").

Неужто самому ну НИКАК не разобраться в трёх строчках РАБОТАЮЩЕГО кода? Как, интересно, вы смогли освоить эксплуатацию простейшего сотового телефона? Или - так и не освоили?:-)))

  Ответить  
 
 автор: Silentium   (22.04.2009 в 17:03)   письмо автору
 
   для: PAT   (22.04.2009 в 16:45)
 

Про разделители я догадаться сумел, а вот в JS я пока в целом не силен, не знаю при чем тут сотовый, но я пользуюсь вертушкой) я понимаю что мой массив нужно привести к виду как у Вас, но в том то и дело что я не знаю как, у меня в массиве просто скопом цифры подряд лежат без всяких разделителей...

  Ответить  
 
 автор: PAT   (22.04.2009 в 23:10)   письмо автору
 
   для: Silentium   (22.04.2009 в 17:03)
 

>у меня в массиве просто скопом цифры подряд лежат без всяких разделителей

Это что за массив такой у вас? :-)
Давайте сюда кусочек кода, где этот массив (или его отдельные элементы) определяются.

  Ответить  
 
 автор: Silentium   (23.04.2009 в 09:23)   письмо автору
 
   для: PAT   (22.04.2009 в 23:10)
 

Переменная берется из xml файла:
Вот кусок
var request = GXmlHttp.create();
      request.open("GET", "example.php", true);
      request.onreadystatechange = function() {
        if (request.readyState == 4) {
          var xmlDoc = GXml.parse(request.responseText);

      // Read the data from example.xml

        var markers = xmlDoc.documentElement.getElementsByTagName("marker");

        for (var i = 0; i < markers.length; i++) 
 var namber = markers[i].getAttribute("number");

{

Переменную namber мне и надо приткнуть в Селект

  Ответить  
 
 автор: PAT   (23.04.2009 в 10:00)   письмо автору
 
   для: Silentium   (23.04.2009 в 09:23)
 

Это вы с середины марта бьётесь над реализацией примера с http://econym.org.uk/gmap/example_map3.htm ?

Мда, действительно,.. тяжело быть бестолковым.

В приведённом выше кусочке кода у вас есть всего один массив
var markers = xmlDoc.documentElement.getElementsByTagName("marker"); 

А затем вы - СОВЕРШЕННО НЕ ПОНИМАЯ ТОГО, ЧТО ПИШЕТЕ - создаете строковую переменную namber, которой столько раз меняете значение - сколько у вас элементов в массиве markers.
Поняли свою глупость?
Если не поняли, то поясню примером:
1. Положили вы в свой ПУСТОЙ кошелёк бумажку в 10 рублей.
2. Затем вытащили эту десятку и положили в кошелек купюру в 50 рублей
3. Затем вытащили полтинник и положили сотню.

Спрашивается - сколько денег у вас в кошельке после последней операции?
Правильный ответ - 100 рублей.
А никак не 160.

А что нужно сделать, чтобы в кошельке было именно 160 рублей?
Правильный ответ - не надо вытаскивать.

А что нужно сделать, если в одно отделение кошелька можно положить всего одну купюру?
Правильный ответ - надо в три отделения кошелька положить по одной купюре: в 10, в 50 и в 100 рублей.


Чтобы namber был массивом, в данном случае необходимо, во-первых, его определить. А во-вторых, создавать его поэлементно.
Т.е. ваш бред:
for (var i = 0; i < markers.length; i++) 
var namber = markers[i].getAttribute("number");
надо заменить на:
for (var namber = [], i = 0; i < markers.length; i++) 
namber [i] = markers[i].getAttribute("number");


После этого кусочка кода пропишите тестовый alert ('!' + namber + '!') и вот именно ТО, что алерт покажет (включая начальный и конечный восклицательные знаки) сюда напишите - это и будет ваш массив, из которого вы хотите сделать список. Когда напишете, тогда и обсудим - где у вас value для опшенов, а где - текст для них.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования