我的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 > > < /形式

其他回答

编辑: 正如Chips_100所说,你应该使用:

var sizes = document.theForm[field];

直接不使用测试变量。


旧的回答:

你不应该这样评估吗?

var sizes = eval(test);

我不知道这是如何工作的,但对我来说,你只是复制了一个字符串。

我更喜欢使用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 > > < /形式

你可以这样做:

var收音机= document.getElementsByName('性别'); 对于(var I = 0,长度= radio .length;I < length;我+ +){ If(收音机[i].checked) { //做任何你想做的检查收音机 警报(无线电[我]。value); //逻辑上只能检查一个无线电,不要检查其他的 打破; } } <label for="gender">性别:</label> <input type="radio" name=" lads " value="1" checked="checked">Male</input> . <input type="radio" name="gender " value="0">Female</input> .

斯菲德尔

编辑:感谢HATCHA和jsetung的编辑建议。

首先,大声喊出ashraf aaref,他的回答我想扩展一点。

正如MDN Web文档建议的那样,使用RadioNodeList是首选的方法:

// Get the form
const form = document.forms[0];

// Get the form's radio buttons
const radios = form.elements['color'];

// You can also easily get the selected value
console.log(radios.value);

// Set the "red" option as the value, i.e. select it
radios.value = 'red';

不过,也可以通过querySelector选择表单,这也很好:

const form = document.querySelector('form[name="somename"]')

但是,直接选择无线电将不起作用,因为它将返回一个简单的NodeList。

document.querySelectorAll('input[name="color"]')
// Returns: NodeList [ input, input ]

在选择表单时,首先返回一个RadioNodeList

document.forms[0].elements['color']
// document.forms[0].color # Shortcut variant
// document.forms[0].elements['complex[naming]'] # Note: shortcuts do not work well with complex field names, thus `elements` for a more programmatic aproach
// Returns: RadioNodeList { 0: input, 1: input, value: "red", length: 2 }

这就是为什么必须首先选择表单,然后调用元素方法。除了所有输入节点之外,RadioNodeList还包括一个属性值,它支持这种简单的操作。

参考:https://developer.mozilla.org/en-US/docs/Web/API/RadioNodeList/value

这适用于任何浏览器。

document.querySelector('input[name="genderS"]:checked').value;

这是获取任何输入类型值的一种简单方法。 你也不需要包含jQuery路径。