Продлема с получением данных из select
Здравствуйте.
Проблема в следующем: на страницу в <div> динамически подгружается форма, в форме присутствует multiple select с N - количеством option. Пытаюсь сделать выбор пунктов без нажатия +ctrl. Сделал тестовый файл со статичной формой, пробежался по селекту, получил значения, занес в массив, здесь все просто, работает отлично. Однако в проекте мое творчество не работает. Не видит скрипт select (document.getElementsById) и все. Передал значения задав событие onchange="myFunction(this.options)", все заработало, но это в том случае, если нет по умолчанию выделенных options. Получается надо пробежать по селекту сразу после загрузки формы и получить выделенные options. Так же встает проблема при отправке значений серверу, все поля отправляются кроме select. В чем может быть проблема?? В JavaScript не силен, так что просьба, по возможности отвечать по проще. Спасибо. |
Код дайте свой. Незабудте оформить.
|
Свой код к сожалению удалил, востанавливать чувствую долго буду, ну вот что я нагуглил:
<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> |
Дальше что?!
|
php создает форму, загружаю в <div id="content"></div>
document.getElementById("content").innerHTML = xmlHttp.responseText; Вопрос в том, почему при динамической загрузке формы, скрипт не работает? С чем это может быть связано? |
Tartyga,
Код в тегах <script> не выполнится, если вы просто вставите его в innerHTML какого-либо элемента. Код скрипта нужно либо вырезать через регулярные выражения и передавать в функцию eval(), либо исполнять отдельно (подсоединяя в DOM текущего документа соответствующие script элементы). Попробуйте добавить код функций в текущий документ, и вызывайте функцию multireal_init() после вставки ответа с сервера в целевой элемент. |
Андрей Параничев, спасибо за ответ.
В общем сделал так: в 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,
document.getElementById возвращает один элемент, а не коллекцию, что вы ожидаете, пытаясь перебрать его по objects.length? Вместо: <iframe onload="multiple_init();" style="display:none"></iframe> Лучше просто в вашем скрипте на index.html сделайте: document.getElementById("content").innerHTML = xmlHttp.responseText; multiple_init(); |
Это я уже с кусками кода запутался, сейчас все заново перепроверил:
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,
Вы можете загрузить полный пример в сеть, или выложить в архиве в приложении к сообщению? |
Часовой пояс GMT +3, время: 03:50. |