Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.08.2009, 15:40
Новичок на форуме
Отправить личное сообщение для Tartyga Посмотреть профиль Найти все сообщения от Tartyga
 
Регистрация: 05.08.2009
Сообщений: 8

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

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

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

Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 05.08.2009, 16:02
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Код дайте свой. Незабудте оформить.
Ответить с цитированием
  #3 (permalink)  
Старый 05.08.2009, 16:38
Новичок на форуме
Отправить личное сообщение для Tartyga Посмотреть профиль Найти все сообщения от Tartyga
 
Регистрация: 05.08.2009
Сообщений: 8

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

<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>
Ответить с цитированием
  #4 (permalink)  
Старый 05.08.2009, 16:41
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Дальше что?!
Ответить с цитированием
  #5 (permalink)  
Старый 05.08.2009, 17:21
Новичок на форуме
Отправить личное сообщение для Tartyga Посмотреть профиль Найти все сообщения от Tartyga
 
Регистрация: 05.08.2009
Сообщений: 8

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

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


Вопрос в том, почему при динамической загрузке формы, скрипт не работает? С чем это может быть связано?
Ответить с цитированием
  #6 (permalink)  
Старый 05.08.2009, 18:01
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

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

Попробуйте добавить код функций в текущий документ, и вызывайте функцию multireal_init() после вставки ответа с сервера в целевой элемент.
Ответить с цитированием
  #7 (permalink)  
Старый 05.08.2009, 20:44
Новичок на форуме
Отправить личное сообщение для Tartyga Посмотреть профиль Найти все сообщения от Tartyga
 
Регистрация: 05.08.2009
Сообщений: 8

Андрей Параничев, спасибо за ответ.
В общем сделал так:
в 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?

Последний раз редактировалось Tartyga, 05.08.2009 в 21:01.
Ответить с цитированием
  #8 (permalink)  
Старый 05.08.2009, 21:17
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

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

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


Лучше просто в вашем скрипте на index.html сделайте:
document.getElementById("content").innerHTML = xmlHttp.responseText;
multiple_init();
Ответить с цитированием
  #9 (permalink)  
Старый 05.08.2009, 21:32
Новичок на форуме
Отправить личное сообщение для Tartyga Посмотреть профиль Найти все сообщения от Tartyga
 
Регистрация: 05.08.2009
Сообщений: 8

Это я уже с кусками кода запутался, сейчас все заново перепроверил:
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

Последний раз редактировалось Tartyga, 05.08.2009 в 21:36.
Ответить с цитированием
  #10 (permalink)  
Старый 05.08.2009, 21:38
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
заполнить select значениями другого select Central Элементы интерфейса 1 30.05.2009 14:41
событие на выпадение-скрытие списка select Aderba jQuery 1 03.04.2009 21:51
Синхронный запрос данных по AJAX Shasoft AJAX и COMET 2 03.03.2009 14:07
Хранимая область данных. PolarWolf Общие вопросы Javascript 17 14.01.2009 18:25
Сохранение данных на стороне клиента средствами Javascript baal1988 Events/DOM/Window 4 24.08.2008 21:32