Получить значение с помощью переключателя — «ввод [имя =’пол’]: проверено» возвращает нуль

#javascript #html #null #radio-button

#javascript #HTML #null #переключатель

Вопрос:

Я пытаюсь получить значение радиовхода, но по какой-то причине оно возвращает значение null. Вот код:

HTML

 <form id="myForm">   
  <input name="gender" type="radio" value="male" />
  <label for="male">Male</label>
  <input name="gender" type="radio" value="female" />
  <label for="female">Female</label>
</form>   
  

JS

 const form = document.getElementById("myForm");
const selectedGender = document.querySelector("input[name='gender']:checked");

  
 
form.addEventListener("submit", (e) => {
  e.preventDefault();
  console.log(selectedGender);
});
  

Почему я получаю null в консоли?

Ответ №1:

Вы запускаете querySelector даже до того, как произойдет событие выбора. Вы просто регистрируете его на консоли в событии отправки.

Все, что вам нужно сделать, это отправить selectedGender внутри EventListener.

 form.addEventListener("submit", (e) => {
  e.preventDefault();
  const selectedGender = document.querySelector("input[name='gender']:checked");
  console.log(selectedGender);
});
  

Комментарии:

1. Вы правы с selectedGender, но eventlistener никогда не вызывается.

Ответ №2:

Вы сделали выбор раньше, чем dom был готов.

Вы могли бы сделать это внутри функции evenlistener или, по крайней мере, в готовой функции.

 (function() {
const selectedGender = document.querySelector("input[name='gender']:checked");
console.log(selectedGender);
})();
  

или создайте функцию для его вызова.

 bigLogic = () => {

 //A lot of logic

 const selectedGender = document.querySelector("input[name='gender']:checked");
 console.log(selectedGender);
 //More logic
}


form.addEventListener("submit", (e) => {
  e.preventDefault();
  bigLogic();
});