Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.08.2017, 21:58
Интересующийся
Отправить личное сообщение для Lun2 Посмотреть профиль Найти все сообщения от Lun2
 
Регистрация: 28.08.2017
Сообщений: 14

Как программно добавить "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>
Ответить с цитированием
  #2 (permalink)  
Старый 28.08.2017, 23:05
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

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>

Последний раз редактировалось рони, 04.09.2017 в 00:06.
Ответить с цитированием
  #3 (permalink)  
Старый 03.09.2017, 21:09
Интересующийся
Отправить личное сообщение для Lun2 Посмотреть профиль Найти все сообщения от Lun2
 
Регистрация: 28.08.2017
Сообщений: 14

Рони, спасибо!

А почему не работает реакция на onchange, что я неправильно сделал ?
Ответить с цитированием
  #4 (permalink)  
Старый 03.09.2017, 21:32
Интересующийся
Отправить личное сообщение для Lun2 Посмотреть профиль Найти все сообщения от Lun2
 
Регистрация: 28.08.2017
Сообщений: 14

Рони, у меня еще вопрос:
если после "var new_text = document.createTextNode("qqq");"

я задаю новый текст, присваивая значение атрибуту new_text.innerHTML,

то текст новой кнопки не меняется, т.е. остается = "qqq".

Каким образом и я могу присвоить new_text строку с HTML-тегами ?
Ответить с цитированием
  #5 (permalink)  
Старый 03.09.2017, 21:36
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

new_text.textContent
вместо
new_text.innerHTML
Ответить с цитированием
  #6 (permalink)  
Старый 03.09.2017, 22:18
Интересующийся
Отправить личное сообщение для Lun2 Посмотреть профиль Найти все сообщения от Lun2
 
Регистрация: 28.08.2017
Сообщений: 14

J0hnik, пробовал "new_text.textContent", но насколько я понял, это обычный текст, т.е. теги в нем не воспринимаются.
А мне нужно добавить текст с тегами.
Ответить с цитированием
  #7 (permalink)  
Старый 03.09.2017, 22:44
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

<!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>
Ответить с цитированием
  #8 (permalink)  
Старый 04.09.2017, 00:11
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от Lun2
почему не работает реакция на onchange,
исправил пост №2
Сообщение от Lun2
А мне нужно добавить текст с тегами.
new_text это текстовая нода, может содержать только текст.
смотрите пример j0hnik,
и читайте доку https://learn.javascript.ru/modifying-document
https://learn.javascript.ru/multi-insert
Ответить с цитированием
  #9 (permalink)  
Старый 07.09.2017, 22:05
Интересующийся
Отправить личное сообщение для Lun2 Посмотреть профиль Найти все сообщения от Lun2
 
Регистрация: 28.08.2017
Сообщений: 14

Спасибо за подсказки, но я все-таки не понял, почему не работает реакция на событие onchange у программно добавленной радио-кнопки..
Ответить с цитированием
  #10 (permalink)  
Старый 07.09.2017, 22:45
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

<!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>

может заранее вешаете?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как добавить объект в панораму 360 с использованием Three.js? protexon Элементы интерфейса 0 28.10.2015 20:57
как добавить еще один селектор foxfor jQuery 1 29.05.2015 12:32
Как добавить данные в глобальный массив из функции Jigan2 jQuery 2 14.03.2015 18:06
Как сделать смену картинки, типа "до" и "после", без перезагрузки страницы? btstudio Events/DOM/Window 2 23.02.2009 20:43
Как добавить свой блог в раздел feeds этого сайта IzumeRoot Ваши сайты и скрипты 13 30.10.2008 21:11