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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с созданием INPUT RADIO, В IE не работает, в остальных - ошибки 
:(
    Опции темы
Ace Wentura
Дата 16.8.2005, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Есть задача - показывать пункты выбора при определённых условиях.
То есть выбираю, скажем, из двух радио-кнопок первую - появляется дополнительный пункт меню у неё. Со второй аналогично.

Создание вроде как осилил, но возникают проблемы:
в IE не происходит чек - то есть нельзя сделать выбор. Просто создаётся и всё
в Мозиле и Опере чек сделать можно, но на события онЧек ругается.

Вот пример:
Код

<html><head><title></title></head>
<body>
<script language="JavaScript" type="text/javascript">
<!--
var radio1, radio2, radio3, radio4;

radio1 = document.createElement("input");
radio1.setAttribute("name","radiobutton1");
radio1.setAttribute("type","radio");
radio1.setAttribute("value","1");

radio2 = document.createElement("input");
radio2.setAttribute("name","radiobutton1");
radio2.setAttribute("type","radio");
radio2.setAttribute("value","2");
radio2.setAttribute("onCheck","Show3();");

radio3 = document.createElement("input");
radio3.setAttribute("name","radiobutton2");
radio3.setAttribute("type","radio");
radio3.setAttribute("value","3");

radio4 = document.createElement("input");
radio4.setAttribute("name","radiobutton2");
radio4.setAttribute("type","radio");
radio4.setAttribute("value","4");

function Show1() {
  document.getElementById("first").appendChild(radio1);
  document.getElementById("first").appendChild(radio2);
}

function Show2() {
  document.getElementById("second").appendChild(radio1);
  document.getElementById("second").appendChild(radio2);
}

function Show3() {
  document.getElementById("first1").appendChild(radio3);
  document.getElementById("first1").appendChild(radio4);
}
<!---->
</script>
<form name="form1" method="post" action="">
<table width="100%"  border="1" cellspacing="0" cellpadding="0">
  <tr>
    <td width="30%">
      <input name="radiobutton" type="radio" value="first" onClick="Show1()">
      First
    </td>
    <td width="30%" id="first">&nbsp;</td>
    <td id="first1">&nbsp;</td>
  </tr>
  <tr>
    <td>
      <input name="radiobutton" type="radio" value="second" onClick="Show2()">
      Second
    </td>
    <td id="second">&nbsp;</td>
    <td id="second1">&nbsp;</td>
  </tr>
</table>
</form>
</body></html>

Должно происходить:
по выбору первого пункта правее него появляются 2 дополнительных радиобатона. По выбору второго из них должны появляться ещё правее ещё 2 радиобатона.
PM MAIL   Вверх
Aliance
Дата 16.8.2005, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Проблема в том, что ты передаешь методу appendChild() одну и ту же ноду, так делать нельзя. Если нода вставлена, то ее последующая вставка автоматически ее удаляет и вставляет в нужное место. Таким образом, пользуйся методом cloneNode()
Добавлено @ 13:12
Код

<html><head><title></title></head>
<body>
<script language="JavaScript" type="text/javascript">
<!--
var radio1, radio2, radio3, radio4;

radio1 = document.createElement("input");
radio1.setAttribute("name","radiobutton1");
radio1.setAttribute("type","radio");
radio1.setAttribute("value","1");

radio2 = document.createElement("input");
radio2.setAttribute("name","radiobutton1");
radio2.setAttribute("type","radio");
radio2.setAttribute("value","2");
radio2.setAttribute("onCheck","Show3();");

radio3 = document.createElement("input");
radio3.setAttribute("name","radiobutton2");
radio3.setAttribute("type","radio");
radio3.setAttribute("value","3");

radio4 = document.createElement("input");
radio4.setAttribute("name","radiobutton2");
radio4.setAttribute("type","radio");
radio4.setAttribute("value","4");

function Show1() {
  document.getElementById("first").appendChild(radio1);
  document.getElementById("first").appendChild(radio2);
}

var radio1_clone = radio1.cloneNode(true);
var radio2_clone = radio2.cloneNode(true);

function Show2() {
  document.getElementById("second").appendChild(radio1_clone);
  document.getElementById("second").appendChild(radio2_clone);
}
<!---->
</script>
<form name="form1" method="post" action="">
<table width="100%"  border="1" cellspacing="0" cellpadding="0">
  <tr>
    <td width="30%">
      <input name="radiobutton" type="radio" value="first" onClick="Show1()">
      First
    </td>
    <td width="30%" id="first">&nbsp;</td>
    <td id="first1">&nbsp;</td>
  </tr>
  <tr>
    <td>
      <input name="radiobutton" type="radio" value="second" onClick="Show2()">
      Second
    </td>
    <td id="second">&nbsp;</td>
    <td id="second1">&nbsp;</td>
  </tr>
</table>
</form>
</body></html>

PM MAIL WWW ICQ Skype   Вверх
Sardar
Дата 16.8.2005, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(Ace @ 16.8.2005, 12:01)
в IE не происходит чек - то есть нельзя сделать выбор. Просто создаётся и всё

Это возможно если у чекбоска нет имени. В ИЕ нельзя инпутам ставить имя через name/setAttribute, его личное ограничение. Фикситься через:
Код
document.createElement("<input name='imja'>");

Да, не по стандарту... а когда ИЕ за стандартами следил...? smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Ace Wentura
Дата 16.8.2005, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо большое
Буду переделывать и отлаживать smile
PM MAIL   Вверх
Ace Wentura
Дата 16.8.2005, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Возник ещё несколько вопросов примерно по этой же теме:
1. Можно ли создать так:
Код

document.createElement("<input name='imja' type='radio' value='123'>");

2. Как лучше описать название для пункта? Через label или через текстовое поле? И как лучше сделать такое создание?
PM MAIL   Вверх
Aliance
Дата 16.8.2005, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



1. Зачем? Просто вставляй тогда innerHTML, либо другими методами.
2. Через label, но это не в тот раздел, наверное.
PM MAIL WWW ICQ Skype   Вверх
Ace Wentura
Дата 18.8.2005, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Приходится снова возвращаться к данной тематике:
у меня сейчас создаётся input с именем, как посоветовал Sardar. Это замечательно работает в ИЕ. Но перестало работать в Мозиле и Опере. Что можете порекомедовать:
- создавать определяя тип браузера?
или
- использовать какой-то единый подход для создания, но несколько отличающийся от моего?
PM MAIL   Вверх
Aliance
Дата 18.8.2005, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Цитата(Ace @ 18.8.2005, 13:00)
использовать какой-то единый подход для создания, но несколько отличающийся от моего?

smile

Может прибегнуть все-таки к innerHTML?
PM MAIL WWW ICQ Skype   Вверх
Ace Wentura
Дата 18.8.2005, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Я попробовал сделать так:
Код

member1=document.createElement("<label class='main'>");
member1.innerHTML="<input name='Members' type='radio' value='user' class='main'>123";

Но в мозиле появляется непонятная вещь - <> перед радиобатоном...
Как поправить - не знаю.
PM MAIL   Вверх
Sardar
Дата 18.8.2005, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(Ace @ 18.8.2005, 11:00)
Но перестало работать в Мозиле и Опере. Что можете порекомедовать:

Я же сказал:
Цитата(Sardar @ 16.8.2005, 13:37)
Да, не по стандарту... а когда ИЕ за стандартами следил...? smile

В мозилле и опере работаем согласно спецификации DOM 1, т.е. передаём имя тега, и только в ИЕ лажу. За то что ИЕ плюёт на стандарты, ему даже некоторые бойкот устроили smile
Цитата(Ace @ 18.8.2005, 14:09)
Я попробовал сделать так:

Эта строчка: member1=document.createElement("<label class='main'>");Валидна только в ИЕ, а весь остальной мир плевать на неё хотел, ибо не по стандарту.
Меняем:
Код
var member1=document.createElement("LABEL");
member1.className='main';



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Ace Wentura
Дата 18.8.2005, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



АФФИгеть.
В одной строчке поправил - всё заработало так, как было нужно.... Жуть какая-то. smile

Спсибо и Aliance и Sardar. smile Использовал совместный подход:
Код

var member1=document.createElement("LABEL");
member1.className='main';
member1.innerHTML="<input name='Members' type='radio' value='user' class='main'>123";

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


 




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


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

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