Javascript.RU

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

Как правильно задать цикл для querySelectorAll
Приветствую, имеется скрипт, который делает кнопку disabled, пока не выбрана одна из радио (любая). Исходя из информации в интернете понял, что проблема в неверном цикле

Спасибо)


Код
https://codepen.io/EdemKakMozhem/pen/XWELqoO
Ответить с цитированием
  #2 (permalink)  
Старый 29.08.2022, 22:50
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

EdemKakMozhem,
у списка элементов не бывает обработчиков событий и состояния checked, делайте цикл по списку, и назначайте каждому элементу списка, то что вы хотели назначить всему списку. понятно?
Ответить с цитированием
  #3 (permalink)  
Старый 29.08.2022, 22:57
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от EdemKakMozhem
проблема в неверном цикле
Судя по задаче цикл там не нужен...
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<!--
<script src="https://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
-->
<style>
</style>
<script>
document.addEventListener('DOMContentLoaded', _ => {
	const o = document.querySelector('.form')
	o.addEventListener('click', e => test())
	function test() {
		o.querySelector('.btn-next').disabled = !o.querySelector(':checked') 
	}
	test()
})
</script>
</head>
<body>
<form class="form">
	<input class="radio" id="block-11m" type="radio" name="radio" value="level-2">
	<label for="block-11m">одноэтажный</label>
	<input class="radio" id="block-12m" type="radio" name="radio" value="leveд-1">
	<label for="block-12m">двухэтажный</label>
	<input class="radio" id="block-13m" type="radio" name="radio" value="level-3">
	<label for="block-13m">трехэтажный</label>
	<button class="btn-next" name="submit" type="submit">ДАЛЕЕ</button>
</form>
</body>
</html>
Ответить с цитированием
  #4 (permalink)  
Старый 29.08.2022, 23:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

EdemKakMozhem,
с циклом
<!DOCTYPE html>
<html>

<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <script>
        document.addEventListener("DOMContentLoaded", function() {
            let form = document.querySelector(".form");
            let btn = document.querySelector(".btn-next");
            btn.setAttribute("disabled", true);
            let radioBtn = document.querySelectorAll('input[type="radio"]');
            radioBtn.forEach(function(input) {
                input.addEventListener("change", function() {
                    btn.removeAttribute("disabled");
                })
            })
        })
    </script>
</head>

<body>
    <form class="form">
        <input class="radio" id="block-11m" type="radio" name="radio" value="level-2">
        <label for="block-11m">одноэтажный</label>
        <input class="radio" id="block-12m" type="radio" name="radio" value="leveд-1">
        <label for="block-12m">двухэтажный</label>
        <input class="radio" id="block-13m" type="radio" name="radio" value="level-3">
        <label for="block-13m">трехэтажный</label>
        <button class="btn-next" name="submit" type="submit">ДАЛЕЕ</button>
    </form>
</body>

</html>

с делегированием
<!DOCTYPE html>
<html>

<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <script>
        document.addEventListener("DOMContentLoaded", function() {
            let form = document.querySelector(".form");
            let btn = document.querySelector(".btn-next");
            btn.setAttribute("disabled", true);
            form.addEventListener("change", function({
                target
            }) {
                if (target.closest('.radio')) this.submit.disabled = false;
            })
        })
    </script>
</head>

<body>
    <form class="form">
        <input class="radio" id="block-11m" type="radio" name="radio" value="level-2">
        <label for="block-11m">одноэтажный</label>
        <input class="radio" id="block-12m" type="radio" name="radio" value="leveд-1">
        <label for="block-12m">двухэтажный</label>
        <input class="radio" id="block-13m" type="radio" name="radio" value="level-3">
        <label for="block-13m">трехэтажный</label>
        <button class="btn-next" name="submit" type="submit">ДАЛЕЕ</button>
    </form>
</body>

</html>
Ответить с цитированием
  #5 (permalink)  
Старый 29.08.2022, 23:39
Новичок на форуме
Отправить личное сообщение для EdemKakMozhem Посмотреть профиль Найти все сообщения от EdemKakMozhem
 
Регистрация: 29.08.2022
Сообщений: 2

Спасибо! Кнопка "далее" листает к следующему слайду с такой же формой, подскажите, можно ли сделать так, чтобы с "радио" снималось событие change, в противном случае оно берется с первого слайда и кнопка "далее" становится активной на всех остальных
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите как правильно применить foreach для errorPlacement Vaska jQuery 2 19.06.2021 13:31
Как правильно настроить Google Cloud CDN? alexriver Серверные языки и технологии 1 27.08.2020 15:01
Как задать координаты для draggable-элемента, добавленного с помощью jquery UI begin jQuery 5 16.05.2014 20:14
Как узнать реальный borderLeftWidth для TD в FireFox? gadyuka Events/DOM/Window 2 14.07.2013 11:58
Как правильно скрыть элементы для экономии ресурсов на прорисовку? Randomizer jQuery 0 16.10.2012 13:59