onchange="build_list(this, 'nation', this.options[this.selectedIndex].text);"событие не фурычит в ИЕ8
итак суть:
изначально на форме есть пустые селекты.
при событии onmousedown js заполняет опшыны соответствующего селекта из массива релевантными значениями.
далее при событии onchange this.selectedIndex в ИЕ всегда равен -1(в других браузерах всё работает на ура).
как можно это излечить?
Спустя 10 часов, 7 минут, 12 секунд (2.07.2011 - 22:18) ApuktaChehov написал(а):
в место this.options[this.selectedIndex].text, попробуйте this.value
Спустя 1 час, 8 минут, 16 секунд (2.07.2011 - 23:26) Guest написал(а):
результат аналогичный.
вперчатление такое будто в ИЕ список вообще не создался
<!DOCTYPE html >
<html>
<head>
<title>IE SUCKS!</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script>
function build_list(obj, sel)
{
if(sel == null)
{
obj.options.length = null;
var optn = document.createElement("option");
optn.text = 'text';
optn.value = 'value';
obj.options.add(optn);
obj.selectedIndex = -1
} else {
obj.options[obj.selectedIndex].text = sel;
}
}
</script>
</head>
<body>
<select id="comboBox" name="comboBox" onmousedown="build_list(this);" onchange="build_list(this, this.options[this.selectedIndex].text);"></select>
</body>
</html>
вперчатление такое будто в ИЕ список вообще не создался
Спустя 54 минуты, 39 секунд (3.07.2011 - 00:21) tatti написал(а):
проблема : селект в ИЕ не успевает обновится
не самое лучшее решение : сменить onmousedown на onfocus(тогда надо дважды по селекту клацнуть чтоб его.. и он успевает обновится)
может кто знает способ получше?
не самое лучшее решение : сменить onmousedown на onfocus(тогда надо дважды по селекту клацнуть чтоб его.. и он успевает обновится)
может кто знает способ получше?
Спустя 7 часов, 21 минута, 5 секунд (3.07.2011 - 07:42) ApuktaChehov написал(а):
А что вы хотите сделать?
Спустя 2 часа, 12 минут, 28 секунд (3.07.2011 - 09:55) tatti написал(а):
ApuktaChehov
пример не совсем удачный получился <_< проблема решена добавлением события onmouseover на котором теперь происходит тоже что происходило раньше на onmousedown, а на 2-ое повесила функцию-отключатель, сейчас покажу ;) может кто найдёт решение поэлегантней? всётки жалко так юзера нагружать )
пример не совсем удачный получился <_< проблема решена добавлением события onmouseover на котором теперь происходит тоже что происходило раньше на onmousedown, а на 2-ое повесила функцию-отключатель, сейчас покажу ;) может кто найдёт решение поэлегантней? всётки жалко так юзера нагружать )
<!DOCTYPE html >
<html>
<head>
<title>IE SUCKS!</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script>
var color = new Array(5);
color = { 'white':'off', 'yellow':'off', 'green':'off', 'red':'off', 'blue':'off' };
var nation = new Array(5);
nation = { 'Russian':'off', 'American':'off', 'Italian':'off', 'French':'off', 'Albanian':'off' };
var c = new Array(5);
function build_list(obj, column, sel)
{
if(column == 'color') c = color;
else if(column == 'nation') c = nation;
obj.options.length = null;
for(var val in c)
{
if(c[val] == 'off') addOption(obj, val, c[val]);
}
if(sel == null)
{
obj.selectedIndex = -1
} else {
obj.options[obj.selectedIndex].text = sel;
c[obj.options[obj.selectedIndex].text] = 'on';
}
document.getElementById('txt').innerHTML += obj.selectedIndex +'\n';
}
function addOption(obj, text, value)
{
var optn = document.createElement("option");
optn.text = text;
optn.value = value;
obj.options.add(optn);
}
function offOption(obj, column)
{
if(obj.selectedIndex != -1) {
if(column == 'color') c = color;
else if(column == 'nation') c = nation;
c[obj.options[obj.selectedIndex].text] = 'off';
build_list(obj, column);
}
}
function chkSelect(obj, column)
{
if(obj.selectedIndex == -1) build_list(obj, column);
else build_list(obj, column, obj.options[obj.selectedIndex].text);
}
</script>
</head>
<body>
<textarea cols="80" rows="10" id="txt"></textarea>
<br />
<select id="colorBox1" onmouseover="chkSelect(this, 'color');" onmousedown="offOption(this, 'color');" onchange="build_list(this, 'color', this.options[this.selectedIndex].text);"></select>
<select id="colorBox2" onmouseover="chkSelect(this, 'color');" onmousedown="offOption(this, 'color');" onchange="build_list(this, 'color', this.options[this.selectedIndex].text);"></select>
<br /><br />
<select id="nationBox1" onmouseover="chkSelect(this, 'nation');" onmousedown="offOption(this, 'nation');" onchange="build_list(this, 'nation', this.options[this.selectedIndex].text);"></select>
<select id="nationBox2" onmouseover="chkSelect(this, 'nation');" onmousedown="offOption(this, 'nation');" onchange="build_list(this, 'nation', this.options[this.selectedIndex].text);"></select>
</body>
</html>