我的JS程序有一些奇怪的问题。我有这个工作正常,但由于某种原因,它不再工作。我只是想找到单选按钮的值(其中一个被选中)并将其返回给一个变量。由于某种原因,它总是返回undefined。

这是我的代码:

function findSelection(field) {
    var test = 'document.theForm.' + field;
    var sizes = test;

    alert(sizes);
        for (i=0; i < sizes.length; i++) {
            if (sizes[i].checked==true) {
            alert(sizes[i].value + ' you got a value');     
            return sizes[i].value;
        }
    }
}

submitForm:

function submitForm() {

    var genderS =  findSelection("genderS");
    alert(genderS);
}

HTML:

<form action="#n" name="theForm">

    <label for="gender">Gender: </label>
    <input type="radio" name="genderS" value="1" checked> Male
    <input type="radio" name="genderS" value="0" > Female<br><br>
    <a href="javascript: submitForm()">Search</A>
</form>

当前回答

我更喜欢使用formdata对象,因为它表示提交表单时应该发送的值。

注意,它显示了表单值的快照。如果更改值,则需要重新创建FormData对象。如果您想查看收音机的状态变化,您需要订阅更改事件更改事件演示

演示:

let formData = new formData (document.querySelector("form")); console.log('值为:${formData.get("choice")} '); < >形式 比萨皮< p >: < / p > < p > <input type="radio" name="choice" value="regular" > <label for="choice1id">普通外壳</label> < / p > < p > <input type="radio" name="choice" value="deep" checked > <label for="choice2id">深盘</label> < / p > > < /形式

其他回答

我喜欢使用括号从输入中获取值,它比使用圆点更清楚。

document.forms['form_name']['input_name'].value;

我知道这是非常古老的,但现在可以在一行中完成

function findSelection(name) {
    return document.querySelector(`[name="${name}"]:checked`).value
}

ECMAScript 6版本

let genderS = Array.from(document.getElementsByName("genderS")).find(r => r.checked).value;

这里有一个很好的方法来获得选中的单选按钮的值与纯JavaScript:

const form = document.forms.demo;
const checked = form.querySelector('input[name=characters]:checked');

// log out the value from the :checked radio
console.log(checked.value);

来源:https://ultimatecourses.com/blog/get-value-checked-radio-buttons

使用这个HTML:

<form name="demo">
  <label>
    Mario
    <input type="radio" value="mario" name="characters" checked>
  </label>
  <label>
    Luigi
    <input type="radio" value="luigi" name="characters">
  </label>
  <label>
    Toad
    <input type="radio" value="toad" name="characters">
  </label>
</form>

你也可以使用Array Find the checked属性来查找被选中的项:

Array.from(form.elements.characters).find(radio => radio.checked);

我更喜欢使用formdata对象,因为它表示提交表单时应该发送的值。

注意,它显示了表单值的快照。如果更改值,则需要重新创建FormData对象。如果您想查看收音机的状态变化,您需要订阅更改事件更改事件演示

演示:

let formData = new formData (document.querySelector("form")); console.log('值为:${formData.get("choice")} '); < >形式 比萨皮< p >: < / p > < p > <input type="radio" name="choice" value="regular" > <label for="choice1id">普通外壳</label> < / p > < p > <input type="radio" name="choice" value="deep" checked > <label for="choice2id">深盘</label> < / p > > < /形式