#javascript #typeerror #queryselector
Вопрос:
у меня есть выбор на моей странице, который позволяет мне динамически создавать группы rodio. Когда я изменяю параметры выбора, я удаляю старые радиостанции и добавляю новые в ту же форму. Теперь мне нужно прочитать значение выбранного радио из данной группы, которое в данный момент «видно». Радиогруппы имеют уникальные названия. Когда я пытаюсь выполнить функцию с приведенным ниже кодом, я получаю неперехваченную ошибку типа: документ.Параметр querySelector(…) равен нулю. Что я пытаюсь получить с помощью этих циклов, так это найти правильную группу радиостанций и получить значение (самое важное) от выбранной. Если есть более простой или другой способ сделать это, я открыт для хорошего слова, предпочтительно в js. Это то, что у меня есть на данный момент времени
for (let key in glowne_klasy_radio) {
let wartosc = document.querySelector('input[type="radio"][name="' key '"]:checked').value;
}
а также это
let group_radios_names = ["rzut", "podanie", "faul", "strata", "swobodny_ruch_pilki"];
for (let i = 0; i < group_radios_names.length; i ) {
let wartosc = document.querySelector('input[type="radio"][name="' group_radios_names[i] '"]:checked').value;
}
Комментарии:
1. Что такое
glowne_klasy_radio
иradios
?2. Должно быть то же самое, мисс пилинг на моей стороне, извините, но я уже обработал это. Я внес поправку, но она все еще не работала.
Ответ №1:
Ваша проблема вызвана непроверенными или несуществующими переключателями. Этого можно легко избежать, введя более терпимый способ запроса .value
атрибута, см. Здесь:
const radios = ["rzut", "podanie", "faul", "strata", "swobodny_ruch_pilki"];
function getAttr(obj,attr){
return obj amp;amp; obj.closest('div').style.display!=="none" amp;amp; obj[attr]; }
function showHide(){
document.querySelectorAll('input[type="radio"]').forEach(q=>q.closest("div").style.display=Math.random()>.5?"":"none")
}
function getValues(){
const values={};
radios.forEach(r=>
values[r]=getAttr(
document.querySelector('input[type="radio"][name="' r '"]:checked'),"value"));
console.log(values);
}
// Create radio buttons:
document.querySelector("div").innerHTML=radios.map(r=>'<div>' r ':' ["A","B","C"].map(v=>'<br><label><input type="radio" name="' r '" value="' v '"> ' v '</label>').join('') '</div>').join("<hr>")
// Connect getValues function to button:
document.querySelectorAll("button").forEach((b,i)=>b.onclick=[showHide,getValues][i]);
<button>show/hide some</button>
<button>check values</button>
<div style="height:650px"></div>
В этой пересмотренной версии сценария я также проверяю видимость группы переключателей, просматривая видимость родительского элемента:
obj.closest('div').style.display!=="none"
Только если это true
так, то obj
будет возвращено значение of.
Комментарии:
1. Спасибо за ваш ответ, я определенно стараюсь его использовать, особенно функцию GetValue (), которая, я думаю, будет очень полезна для моего проекта. Кстати. проблема была вызвана непроверенными или несуществующими переключателями. Я уже опубликовал часть кода, которая работает для меня на данный момент, но я буду иметь в виду ваше решение моего вопроса. Еще раз большое вам спасибо.
Ответ №2:
Работая с кодом, я использовал элемент.querySelector, где let parent-родительский элемент для моих переключателей.
let parent = document.querySelector("form[id='glowneRadios']");
let wartosc = parent.querySelector("input[type='radio']:checked").value;