Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Навесить событие на <SELECT>


Автор: skyboy 28.6.2006, 14:08
Создаю SELECT run-time, но, судя по его поведению, функция то ли не закрепляется за событием смены, то ли не вызывается...
Код

  function test()
  {
   var sel= document.createElement("select");
   var attrib= document.createAttribute("onchange");
   attrib.value= '"alert(4);"';
   sel.setAttributeNode(attrib);
   var opt= document.createElement("option");
   opt.text= "aaa";
   var opt1= document.createElement("option");
   opt1.text= "bbb";
   sel.add(opt);
   sel.add(opt1);
   document.forms["myform"].appendChild(sel);
  }

Или я неправильно создаю SELECT? 

Автор: vasac 28.6.2006, 14:25
Обработчик неправильно навешиваешь.
Либо:
Код

sel.onchange = function( e ) { alert( 4 ); }

Либо:
Код

if ( sel.addEventListener ) {
  sel.addEventListener( "change", function( e ) { alert( 4 ); }, false );
} else sel.attachEvent( "onchange", function( e ) { alert( 4 ); } );
 

ЗЫ. Писать надо 
Код

sel.add( opt, null );

а то в Gecko работать не будет. 

Автор: skyboy 28.6.2006, 14:43
vasac, спасибо. Я думал, что можно подключать события, как аттрибуты...
А 
Код

sel.add( opt, null );

в IE выдает ошибку "несовпадение типов" smile 

Автор: vasac 28.6.2006, 15:27
Цитата
в IE выдает ошибку "несовпадение типов" 


Точно. 
Тогда либо ветки нужно на ие и фф делать или через appendChild... 

Автор: skyboy 28.6.2006, 15:58
vasac, после appendChild в списке явно два пункта, но нет текста в них. Пробовал делать также appendChild объекта типа HTMLElement(вместо HTMLOptionElement), но ситуация не изменилась - добавляет два пункта, но оба -  без текста. 

Автор: vasac 28.6.2006, 16:26
Вместо 
opt.text= "aaa";
Для пущей совместимости лучше:
opt.appendChild( document.createTextNode( "aaa" ) );

Вариант с opt.text у меня работает в FF, но не работает в IE. Последний работает в обоих.
 

Автор: skyboy 28.6.2006, 16:35
vasac, спасибо. Почему-то в программе, где это отлаживал, несмотря на явное использование компонента TwebBrowser и IE-потомственность не работало appendChild - потому-то я и извращался со свойством text... Буду теперь убивать "alt" и "tab"  smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)