Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Продлема с получением данных из select (https://javascript.ru/forum/misc/4588-prodlema-s-polucheniem-dannykh-iz-select.html)

Tartyga 05.08.2009 15:40

Продлема с получением данных из select
 
Здравствуйте.

Проблема в следующем: на страницу в <div> динамически подгружается форма, в форме присутствует multiple select с N - количеством option. Пытаюсь сделать выбор пунктов без нажатия +ctrl. Сделал тестовый файл со статичной формой, пробежался по селекту, получил значения, занес в массив, здесь все просто, работает отлично. Однако в проекте мое творчество не работает. Не видит скрипт select (document.getElementsById) и все. Передал значения задав событие onchange="myFunction(this.options)", все заработало, но это в том случае, если нет по умолчанию выделенных options. Получается надо пробежать по селекту сразу после загрузки формы и получить выделенные options. Так же встает проблема при отправке значений серверу, все поля отправляются кроме select. В чем может быть проблема??

В JavaScript не силен, так что просьба, по возможности отвечать по проще.

Спасибо.

B~Vladi 05.08.2009 16:02

Код дайте свой. Незабудте оформить.

Tartyga 05.08.2009 16:38

Свой код к сожалению удалил, востанавливать чувствую долго буду, ну вот что я нагуглил:

<script type="text/javascript">

var multireal = new Array();
function multireal_init(){
   var i, j, opts;
   objects = document.getElementsByTagName( "SELECT" );
   for( i = 0; i < objects.length; i ++ ){
       if( objects[ i ].getAttribute( "MULTIREAL" ) == 1 ){
           multireal[ objects[ i ] ] = new Array();
           for( j = 0; j < objects[ i ].length; j ++ ){
               multireal[ objects[ i ] ][ j ] = objects[ i ][ j ].selected;
           }
           objects[ i ].onchange = function(){
               multireal_do( this );
           }
       }
   }
}
function multireal_do( obj ){
   var i, idx = obj.selectedIndex;
   multireal[ obj ][ idx ] = multireal[ obj ][ idx ] ? false : true;
   for( i = 0; i < obj.length; i++ ){
       obj[ i ].selected = multireal[ obj ][ i ];
   }
}

</script>
</head>

<body>
<select multiple="multiple" multireal=1>
   <option name="opt1" value="op1">Option 1
   <option name="opt2" value="op2">Option 2
   <option name="opt3" value="op3">Option 3
   <option name="opt4" value="op4">Option 4
   <option name="opt5" value="op5">Option 5
</select>
<script type="text/javascript">

multireal_init();

</script>

B~Vladi 05.08.2009 16:41

Дальше что?!

Tartyga 05.08.2009 17:21

php создает форму, загружаю в <div id="content"></div>

document.getElementById("content").innerHTML = xmlHttp.responseText;


Вопрос в том, почему при динамической загрузке формы, скрипт не работает? С чем это может быть связано?

Андрей Параничев 05.08.2009 18:01

Tartyga,
Код в тегах <script> не выполнится, если вы просто вставите его в innerHTML какого-либо элемента. Код скрипта нужно либо вырезать через регулярные выражения и передавать в функцию eval(), либо исполнять отдельно (подсоединяя в DOM текущего документа соответствующие script элементы).

Попробуйте добавить код функций в текущий документ, и вызывайте функцию multireal_init() после вставки ответа с сервера в целевой элемент.

Tartyga 05.08.2009 20:44

Андрей Параничев, спасибо за ответ.
В общем сделал так:
в index.html добавляю
function multiple_init() {
     
      var obj = document.getElementById('description').value;
      alert(obj);  
    
}


в конец шаблона формы добавляю

<iframe onload="multiple_init();" style="display:none"></iframe>

Загружаю содержимое формы все так жы в innerHTML. Получаю окошко с value. Работает!!

Теперь заменяю код на:
var multiple = new Array();

function multiple_init() {
      
      var objects = document.getElementById('mySelect');
      
      for (i = 0; i < objects.length; i ++ ) {
      	
          	if (objects.options[i].selected) multiple.push(i);
      	
      }
    
    alert(multiple);  
    
}


Загружаю содержимое формы - нефига!! Ни значения, ни даже алерта.

Получается что document.getElementById('ID') "видит" все элементы кроме select?

Андрей Параничев 05.08.2009 21:17

Tartyga,
document.getElementById возвращает один элемент, а не коллекцию, что вы ожидаете, пытаясь перебрать его по objects.length?

Вместо:
<iframe onload="multiple_init();" style="display:none"></iframe>


Лучше просто в вашем скрипте на index.html сделайте:
document.getElementById("content").innerHTML = xmlHttp.responseText;
multiple_init();

Tartyga 05.08.2009 21:32

Это я уже с кусками кода запутался, сейчас все заново перепроверил:
var multiple = new Array();
 
function multiple_init() {
 
      var objects = document.getElementById('mySelect');
      
      //либо var objects = document.getElementsByTagName( "SELECT" );
 
      for (i = 0; i < objects.options.length; i ++ ) {
 
              if (objects.options[i].selected) multiple.push(i);
 
      }
 
    alert(multiple);  
 
}


option скрипт получает только в том случае, если я на select вешаю событие onchange="multiple_init(this)", но в этом случае я не могу отследить элементы которые выделены по умолчанию при загрузке формы и опять же, это не поможет передать значения в php

Андрей Параничев 05.08.2009 21:38

Tartyga,
Вы можете загрузить полный пример в сеть, или выложить в архиве в приложении к сообщению?


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