Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2008, 03:25   #1
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию Проблема ONCHANGE в IE

Динамически создаю строки таблицы, и в последней ячейке мне нужен селект:
Код:
td5.innerHTML='<select id="ss'+String(i)+'sel" onchange="recalc('+String(num1)+','+String(num2)+','+String(i)+')">'+
'<option>0<option>1<option>2<option>3<option>4<option>5</select>';
В Опере ONCHANGE работает на "ура", в IE обращения к функции RECALC просто нет...
Ставил после этой строки две таких (для проверки):
Код:
elem2=d.getElementById('ss'+String(i)+'sel');
alert(elem2.onchange);
В Опере алерт честно пишет:
"function (event){recalc(10001,10012,10001)}"
Зато в IE:
"function anonimouse() {recalc(10001,10012,10001)}"
Чую, что дело именно в этом - не воспринимается в IE как EVENT, но как это исправить, допереть не могу уже два дня.
Прошу помочь.
mihali4 вне форума Ответить с цитированием
Старый 24.11.2008, 11:33   #2
wall66
Участник клуба
 
Аватар для wall66
 
Регистрация: 04.10.2008
Сообщений: 1,485
По умолчанию

попробуй разные варианты регистра чтоли... в голову приходит только устанавливать атрибут onChange отдельно, после прописывания innerHTML
свободен...
wall66 вне форума Ответить с цитированием
Старый 24.11.2008, 11:38   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
устанавливать атрибут onChange отдельно, после прописывания innerHTML
Пробовал, не проходит.

И еще одна странная вещь, но, видимо связанная с этой же причиной. Если написать простейшее ...onchange="alert('aaa')"..., и Опера, и Осел вываливаются с ошибкой...
Причем именно только в случае INNERHTML...
mihali4 вне форума Ответить с цитированием
Старый 24.11.2008, 12:44   #4
wall66
Участник клуба
 
Аватар для wall66
 
Регистрация: 04.10.2008
Сообщений: 1,485
По умолчанию

так... ну потестил, хоть ИЕ и воспринимает ончейнж как anonymouse, но тем не менее все исправно исполняет, так что может дело в положении функции, синтаксисе
свободен...
wall66 вне форума Ответить с цитированием
Старый 24.11.2008, 14:04   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
потестил, хоть ИЕ и воспринимает ончейнж как anonymouse, но тем не менее все исправно исполняет
Посмотреть можно тестовый примерчик ?
mihali4 вне форума Ответить с цитированием
Старый 24.11.2008, 17:08   #6
wall66
Участник клуба
 
Аватар для wall66
 
Регистрация: 04.10.2008
Сообщений: 1,485
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Посмотреть можно тестовый примерчик ?
просто замени recalc(10001,10012,10001) на alert('10001,10012,10001') - вот и будет примерчик
свободен...
wall66 вне форума Ответить с цитированием
Старый 24.11.2008, 22:55   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от wall66 Посмотреть сообщение
просто замени recalc(10001,10012,10001) на alert('10001,10012,10001') - вот и будет примерчик
Нет, такая штука не проходит... И Опера, и Осел вылетают с ошибкой... См. пост N3.
(это касается случая именно с динамически создаваемой таблицей и именно с innerHTML)
mihali4 вне форума Ответить с цитированием
Старый 24.11.2008, 23:03   #8
wall66
Участник клуба
 
Аватар для wall66
 
Регистрация: 04.10.2008
Сообщений: 1,485
По умолчанию

Код HTML:
<table><tr><td id="qwer">!</td></tr></table>
<script>document.getElementById('qwer').innerHTML='<select id="zxcv" onchange="alert(document.getElementById(\'zxcv\').onchange);"><option>1</option><option>2</option></select>'</script>
толькочто написал - проверил во всех браузерах на доступной машине - работает
свободен...
wall66 вне форума Ответить с цитированием
Старый 24.11.2008, 23:39   #9
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Не тот вариант. С ним нет проблем.
А я создаю новый ряд tr, а в нем - ячейки td и они не имеют идентификаторов.
Код:
var row=d.createElement("TR"); 
...
var td1=d.createElement("TD");
var td2=d.createElement("TD");
...
row.appendChild(td5);
td5.innerHTML='<select id="ss'+String(i)+'sel" onchange="...
Причем эта проблема только с селектом. Тот же батон - никаких проблем...
В инете очень много оказалось по этому поводу. Умные люди сказали, что это ослиный баг.

З.Ы. Проблема решена.
Код:
for (i=min; i<=max; i++) {
...
td5.innerHTML='<select id="ss'+String(i)+'sel"><option>0<option>1<option>2<option>3<option>4<option>5</select>';
elem2=d.getElementById('ss'+String(i)+'sel');
elem2.onchange=function() {
//а вот сюда пришлось перенести операторы из RECALC. Просто ссылка на RECALC, как я упоминал, не помогла...
Правда, пришлось еще немного с передаваемыми параметрами "побороться"...

Последний раз редактировалось mihali4; 25.11.2008 в 00:12.
mihali4 вне форума Ответить с цитированием
Старый 25.11.2008, 00:15   #10
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,547
По умолчанию

Странно, но если так работает:
Код:
<table><tr><td id="qwer">!</td></tr></table>
<script>
document.getElementById('qwer').innerHTML='<select id="ss1sel" onchange="alert(\'hhh\');">'+
'<option>0<option>1<option>2<option>3<option>4<option>5</select>';
</script>
То и Ваш вариант должен работать. Можно на код целиком взглянуть?
Arigato вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TEdit.Onchange azat Компоненты Delphi 1 27.11.2007 12:36
проблема bill Свободное общение 7 08.07.2007 21:05
Вычисления по условию. Событие onChange Наташа Помощь студентам 13 27.12.2006 12:28
Проблема Vanek B Общие вопросы Delphi 4 17.12.2006 13:30