Продлема с получением данных из 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, время: 02:58. |