Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Элементы формы, сгенерированные через DOM, Нужно ли регестрировать созданный объект 
V
    Опции темы
Ashen
  Дата 8.6.2007, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 1.9.2006

Репутация: нет
Всего: нет



Проблема такая - есть форма на которой динамически через DOM генерятся select'ы, и когда мне нужно обратиться к выбранному элементу сгенерированного списка, то пишу конструкцию вида:
Код

// answer1 - название сгенеренного select'a, konkurs_form - название формы(статична и генерится на сервере)
document.konkurs_form.answer1.options[document.konkurs_form.answer1.selectedIndex].value;


В firefox и opera проблем не возникает, а вот Ie  радует сообщением из разряда что такой объект не существует((((
Да, на всякий случай, скрипт для генерации списка динамически подкачивается с сервера через XMLHttp/XMLHttpRequest (мало ли...)

вот код который генерирует элементы списка
Код

            var k_select;
            k_select=document.createElement('select');
            k_select.className='konkurs_text';
            k_select.setAttribute('name','answer1');

                var k_opt=document.createElement('option');
                k_opt.text = 'Ответ 1';
                k_opt.value = '1';
                k_select.options.add(k_opt);

                var k_opt=document.createElement('option');
                k_opt.text = 'Ответ 2';
                k_opt.value = '2';
                k_select.options.add(k_opt);

                var k_opt=document.createElement('option');
                k_opt.text = 'Ответ 3';
                k_opt.value = '3';
                k_select.options.add(k_opt);

            k_select.setAttribute('selectedIndex','0');
            // добавляем select к слою который лежит внутри формы
            // косяк по ходу дела именно здесь
            document.getElementById('konkurs_content_2').appendChild(k_select);


Если проблема именно там, где кажется, то как "прикрутить" созданный элемент к форме?? smile 

Еще - в яваскрипте не очень силен, так что пожалуйста с примерами.

Это сообщение отредактировал(а) Ashen - 8.6.2007, 08:59
--------------------
Хочешь помочь новичку - делай вместе с ним;Хочешь помочь старику - сделай за него;Хочешь помочь мастеру - отойди в сторону;Хочешь помочь дураку - сам дурак...
PM MAIL   Вверх
ksnk
Дата 8.6.2007, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Вот адаптированный кусок кода, который получает у меня массив
result.colors=['#000000':'black','"#A0522D": "Sienna",...] и бросает его в select.
Код

 function(result,error) {
...
  if(elm=document.getElementById('colorselect')) {
    elm.remove(0);// удаляем первый элемент
    if(result.colors)
    for(var i in result.colors)
    {
       var opt=document.createElement('option')
       opt.value=i
       opt.text=result.colors[i]
       opt.color=i
       opt.style.background=result.colors[i]
       try {
          opt=elm.add(opt, null) //standards compliant; doesn't work in IE
       }
       catch(ex) {
          opt=elm.add(opt, elm.options.length); // IE only
       }
       opt=null  
    }
  }
...



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Ashen
Дата 8.6.2007, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 1.9.2006

Репутация: нет
Всего: нет



 smile 
бли-ин... если гора не идет к магомеду((( И вправду - к нужному селекту можно обратиться же и по id. Как сильно затормозил


ksnk, спасибо за
Код

...
if(elm=document.getElementById('colorselect')) {
...

--------------------
Хочешь помочь новичку - делай вместе с ним;Хочешь помочь старику - сделай за него;Хочешь помочь мастеру - отойди в сторону;Хочешь помочь дураку - сам дурак...
PM MAIL   Вверх
Zeroglif
Дата 8.6.2007, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(Ashen @  8.6.2007,  08:58 Найти цитируемый пост)
Ie  радует сообщением из разряда что такой объект не существует

Это обычное поведение IE, он не видит name после createElement(): 

Цитата

The NAME attribute cannot be set at run time on elements dynamically created with the createElement method. To create an element with a name attribute, include the attribute and value when using the createElement method. 

http://msdn.microsoft.com/library/default....ties/name_2.asp

Поэтому document.konkurs_form.answer1 до селекта достучаться не может. Отсюда, если нужен name, то его можно или задать в тексте аргумента createElement(), или же скриптом присвоить после создания, например, document.konkurs_form[k_select.name='answer1'] = k_select
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0683 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.