Как программно добавить "input" типа "radio"
Здравствуйте!
Задача - к имеющемуся блоку радио-кнопок <input>, заданному в html, программно добавить еще одну радиокнопку с текстом и реакцию на событие onchange. Посмотрите, пожалуйста, на код - он добавляет радио-кнопку, но событие onchange в нем не работает и ТЕКСТ радио-кнопки ("qq") на экране не высвечивается. Если раскомментировать 2 строки внизу, результат не меняется. Подскажите, пожалуйста, что не так (сами понимаете, в javascript я новичок):
<!DOCTYPE html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<body>
<div>
<div id="player" style="float: left">
</div >
<div id="speed_buttons">
<input type="radio" name="play_back_rate" value =4>Ускор = 4<br>
<input type="radio" name="play_back_rate" value =2>Ускор = 2<br>
<input type="radio" name="play_back_rate" value =1 checked>Норм = 1<br>
<input type="radio" name="play_back_rate" value =0.5>Замедл = 0.5<br>
</div>
</div>
<br clear="all">
</body>
<script>
// получаем ссылку на блок с кнопками (div)
var radio_block = document.getElementById("speed_buttons");
// создаем новый input
var new_speed = document.createElement('input');
// устанавливаем атрибуты, события вновь созданного input-a
new_speed.onchange = 'alert("work!");';
new_speed.name="play_back_rate";
new_speed.type = "radio";
new_speed.value = 99;
// ХОЧУ, ЧТОБЫ ВОЗНИК ЭТОТ ТЕКСТ, НО НЕ ВЫСВЕЧИВАЕТСЯ:
new_speed.innerHTML = 'qq<br>';
// раскомментирование 2 строк далее не помогает
// new_text = document.createTextNode("qqq");
// new_speed.appendChild(new_text);
radio_block.appendChild(new_speed);
</script>
</html>
|
Lun2,
<!DOCTYPE html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<body>
<div>
<div id="player" style="float: left">
</div >
<div id="speed_buttons">
<input type="radio" name="play_back_rate" value =4>Ускор = 4<br>
<input type="radio" name="play_back_rate" value =2>Ускор = 2<br>
<input type="radio" name="play_back_rate" value =1 checked>Норм = 1<br>
<input type="radio" name="play_back_rate" value =0.5>Замедл = 0.5<br>
</div>
</div>
<br clear="all">
</body>
<script>
// получаем ссылку на блок с кнопками (div)
var radio_block = document.getElementById("speed_buttons");
// создаем новый input
var new_speed = document.createElement('input');
// устанавливаем атрибуты, события вновь созданного input-a
new_speed.onchange = function() {
alert("work!");
};
new_speed.name="play_back_rate";
new_speed.type = "radio";
new_speed.value = 99;
radio_block.appendChild(new_speed);
var new_text = document.createTextNode("qqq");
radio_block.appendChild(new_text);
//var new_br = document.createElement('br');
//radio_block.appendChild(new_br);
</script>
</html>
|
Рони, спасибо!
А почему не работает реакция на onchange, что я неправильно сделал ? |
Рони, у меня еще вопрос:
если после "var new_text = document.createTextNode("qqq");" я задаю новый текст, присваивая значение атрибуту new_text.innerHTML, то текст новой кнопки не меняется, т.е. остается = "qqq". Каким образом и я могу присвоить new_text строку с HTML-тегами ? |
new_text.textContentвместо new_text.innerHTML |
J0hnik, пробовал "new_text.textContent", но насколько я понял, это обычный текст, т.е. теги в нем не воспринимаются.
А мне нужно добавить текст с тегами. |
<!DOCTYPE html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<body>
<div>
<div id="player" style="float: left">
</div >
<div id="speed_buttons">
<input type="radio" name="play_back_rate" value =4>Ускор = 4<br>
<input type="radio" name="play_back_rate" value =2>Ускор = 2<br>
<input type="radio" name="play_back_rate" value =1 checked>Норм = 1<br>
<input type="radio" name="play_back_rate" value =0.5>Замедл = 0.5<br>
</div>
</div>
<br clear="all">
</body>
<script>
// получаем ссылку на блок с кнопками (div)
var radio_block = document.getElementById("speed_buttons");
// создаем новый input
var new_speed = document.createElement('input');
// устанавливаем атрибуты, события вновь созданного input-a
new_speed.onchange = 'alert("work!");';
new_speed.name="play_back_rate";
new_speed.type = "radio";
new_speed.value = 99;
radio_block.appendChild(new_speed);
radio_block.insertAdjacentHTML('beforeend', 'qqq<div>Hello World</div>');
//var new_br = document.createElement('br');
//radio_block.appendChild(new_br);
</script>
</html>
|
Цитата:
Цитата:
смотрите пример j0hnik, и читайте доку https://learn.javascript.ru/modifying-document https://learn.javascript.ru/multi-insert |
Спасибо за подсказки, но я все-таки не понял, почему не работает реакция на событие onchange у программно добавленной радио-кнопки.. :(
|
<!DOCTYPE html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<body>
<div>
<div id="player" style="float: left">
</div >
<div id="speed_buttons">
<input type="radio" name="play_back_rate" value =4>Ускор = 4<br>
<input type="radio" name="play_back_rate" value =2>Ускор = 2<br>
<input type="radio" name="play_back_rate" value =1 checked>Норм = 1<br>
<input type="radio" name="play_back_rate" value =0.5>Замедл = 0.5<br>
</div>
</div>
<br clear="all">
</body>
<script>
// получаем ссылку на блок с кнопками (div)
var radio_block = document.getElementById("speed_buttons");
// создаем новый input
var new_speed = document.createElement('input');
// устанавливаем атрибуты, события вновь созданного input-a
new_speed.onchange = 'alert("work!");';
new_speed.name="play_back_rate";
new_speed.type = "radio";
new_speed.value = 99;
radio_block.appendChild(new_speed);
radio_block.insertAdjacentHTML('beforeend', 'qqq<div>Hello World</div>');
new_speed.onchange=e=>alert('проверка связи!');
//var new_br = document.createElement('br');
//radio_block.appendChild(new_br);
</script>
</html>
может заранее вешаете? |
| Часовой пояс GMT +3, время: 13:34. |