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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Input type=radio вставка DOM-методами, неадекватная работа в IE 
:(
    Опции темы
Се ля ви
Дата 22.4.2008, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java/SOAрхитектор
****


Профиль
Группа: Модератор
Сообщений: 2016
Регистрация: 5.6.2004
Где: place without tim e and space

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



В общем, проблемко следующее: как известно из спецификации, что бы заставить браузер воспринимать два радио-баттона связанными, достаточно дать им одинаковое имя. Но на поверку оказывается, что у IE это справедливо только для тех input`ов, которые вставляются именно статикой, в HTML-документе, а для генерации документа с помощью DOM`а всё печально:
Код
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript"><!--
    function add()    {
        x = document.createElement('input');
        x.type = 'radio';
        x.name = 'x1';
        x.value = 'false';
        document.getElementById('id1').appendChild(x);
        
        x = document.createElement('input');
        x.type = 'radio';
        x.name = 'x1';
        x.value = 'true';
        document.getElementById('id1').appendChild(x);
    }
--></script>
</head>
<body>
    <form action="." id="id1">
             <button onclick="add(); return false;">add</button>
        </form>
</body></html>

И опять все нормальные браузеры - Opera, FF и даже Safari всё делают правильно, только вот IE... В общем, ещё бог бы с ним, если бы они хотя бы отдельными становились, так они после вставки вообще не нажимаются. Изменять их значения можно лишь программно, причём программно можно спокойно прочекать оба радио-буттона - т.е. чек на одном не означает отключения другого... :(((


--------------------
  )
 (
[_])
проф. блог

Кролики думали, что занимаются любовью, а на самом деле их просто разводили...
PM MAIL WWW Skype GTalk   Вверх
Itsys
Дата 22.4.2008, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

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



Если добавить в конец функции
Код

alert(document.getElementById('id1').innerHTML);


то ты увидишь, что добавление элементов происходит без присваивания атрибута name, но как с этим бороться, я так и не нашел.
PM MAIL WWW Skype   Вверх
AKS
Дата 22.4.2008, 07:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


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

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



Се ля ви, вот здесь имеется описание IE'шного синтаксиса метода createElement и пример использования.

Это сообщение отредактировал(а) AKS - 22.4.2008, 07:04
PM MAIL   Вверх
Се ля ви
Дата 22.4.2008, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java/SOAрхитектор
****


Профиль
Группа: Модератор
Сообщений: 2016
Регистрация: 5.6.2004
Где: place without tim e and space

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



Itsys, спасибо, на нужную мысль навёл.

В общем, у кого вдруг такая же проблема, читаем - вот решение: http://www.thunderguy.com/semicolon/2005/0...ernet-explorer/

Вот эта функция спасёт Отца Русской Демократии:
Код
function createNamedElement(type, name) {
   var element = null;
   // Try the IE way; this fails on standards-compliant browsers
   try {
      element = document.createElement('<'+type+' name="'+name+'">');
   } catch (e) {}
   if (!element || element.nodeName != type.toUpperCase()) {
      // Non-IE browser; use canonical method to create named element
      element = document.createElement(type);
      element.setAttribute('name', name);
   }
   return element;
}


Добавлено через 2 минуты и 48 секунд
smile
Цитата(AKS @  22.4.2008,  07:04 Найти цитируемый пост)
Се ля ви, вот здесь имеется описание IE'шного синтаксиса метода createElement и пример использования.

Ага, им ещё хватило наглости приписку сделать:
Цитата
This method is defined in World Wide Web Consortium (W3C) Document Object Model (DOM) Level 1
 и ссылку поставить. Как будто так и положено...


--------------------
  )
 (
[_])
проф. блог

Кролики думали, что занимаются любовью, а на самом деле их просто разводили...
PM MAIL WWW Skype GTalk   Вверх
AKS
Дата 22.4.2008, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


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

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



Цитата(Се ля ви @  22.4.2008,  07:50 Найти цитируемый пост)
Ага, им ещё хватило наглости приписку сделать...

Могу предположить, что этот метод в IE был реализован то того, как он был стандартизован W3C. А потом, как обычно у программеров - "зачем переделывать то, что и так работает". ;)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




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


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

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