Делегирование события изменения в IE < 9 - это боль. Возможно, check this question to see how it's done, но это не то, что вы называете элегантным.
Но ваш код не передает событие, так что просто прикрепление обработчика непосредственно в onload
случае следует сделать трюк (и это X-совместимый браузер):
document.getElementById('test').onchange = function(e)
{
e = e || window.event;//the only IE headache
var shown = this.options[this.selectedIndex].value == 1;
document.getElementById('hidden_div').style.display = shown ? 'block' : 'none';
//^^ could keep a reference to this in a closure
};
Полный код (с onload
и закрытие ссылки на скрытые DIV иpreventing memory leaks in ie) должен выглядеть следующим образом:
var winLoad = function(e)
{
var hiddenDiv = document.getElementById('hidden_div');
document.getElementById('test').onchange = function(e)
{
var shown = !!(this.option[this.selectedIndex].value == 1);//to be safe, coerce to bool
hiddenDiv.style.display = shown ? 'block' : 'none';
};
if (window.addEventListener)
{
return window.removeEventListener('load',winLoad,false);
}
return window.detachEvent('onload',winLoad);
};
if (window.addEventListener)
{
window.addEventListener('load',winLoad,false);
}
else
{
window.attachEvent('onload',winLoad);
}
, что должно работать на всех основных браузерах, даже IE7 (возможно IE6 Тоже)
Что вы имеете в виду, удаляя повторение? – dreamweiver
@ dreamweiver вы нажали на скрипку? –
вы можете импровизировать свой код еще больше, более того, это redundant.write один обработчик, основанный на значении 1 или 2, задающем стиль. – dreamweiver