index.html:
<body>
<dialog class="dialog">
<form class="report__form" method="dialog">
<div>
<input type="radio" name="report" vale="vulgar" />
<label for="vulgar">Vulgar/Offensive Language</label>
</div>
<div>
<input type="radio" name="report" vale="duplicate" />
<label for="Duplicate">Duplicate</label>
</div>
<div>
<input type="radio" name="report" vale="broken" />
<label for="broken">Broken</label>
</div>
<button class="dialog__submit">Submit</button>
</form>
</dialog>
<button class="open">open dialog</button>
<script src="script.js"></script>
</body>
script.js:
const dialog = document.querySelector(".dialog");
const reportForm = document.querySelector(".report__form");
const submitButton = document.querySelector(".dialog__submit");
const openButton = document.querySelector(".open");
openButton.addEventListener("click", () => {
dialog.showModal();
});
I’m having a hard time figuring out how to retrieve the radio input values within an HTML dialog. I read the MDN docs on radio inputs but am still struggling to get it to work within the context of a dialog. I figure I need to set a default value, loop through the inputs, and update that value if I click one of them, but I can’t get it to work.
2
Answers
Firstly you need to give each checkbox a
value
attribute, not avale
attribute. From there you can select the:checked
element when the form is submit and process it as required.Also note that the
for
attributes in thelabel
elements need to match theid
of the checkbox. As your checkboxes have noid
, this is not working. Although you can simplify this by wrapping the checkboxes in thelabel
elements, that way you don’t need to include thefor
attribute at all.Here’s working example with the above changes made:
This is based on the MDN documentation.
Explanation- From MDN
This
FormData
object contains the selected input value under akey
named after the name value you specified under byname
in the input, which is, in your case-name="report"
.