var attributeVariables = ['thing1', 'thing2'];

$.each(attributeVariables, function(index, val) {
   attributeVariables[index] = $('input[name='+attributeVariables[index]+']:checked').val();
});

console.log(thing1+" , "+thing2)


在控制台中,产生undefined , undefined

但是,如果运行这些,我将获得thing1thing2的正确值

thing1 = $('input[name=thing1]:checked').val();
thing2 = $('input[name=thing2]:checked').val();


我还有很多其他变量,它们的结构相同,以获取它们的值。我试图避免写超过50次的行。我知道有一个更好的方法,我以为我的第一句话就知道了。有人可以告诉我为什么这不起作用吗?

更新:
我要做的只是根据thing1中的逻辑更新这些已经存在的变量(thing2each)...不将所有内容存储在数组中。

更新2:
重述了另一种方式...我不喜欢这样做。这是我需要的:我大约有30个无线电选择器,每个选择器都绑定到一个不同的变量。我没有为30个不同的变量(thing2 = $('input[name=thing2]:checked').val();)编写30次,而是发现有一个捷径。我会列出要更新的所有变量的列表(基于无线电状态),然后运行一个each

最佳答案

如评论中所述,您没有正确地做事。否则,您的代码几乎可以正常运行。我认为您可以直接在console.log()中使用val代替each

然后,您可以执行条件检查,因为未选中复选框的attributeVariables[index]返回val()



var attributeVariables = ['thing1', 'thing2'];

$.each(attributeVariables, function(index, val) {
  attributeVariables[index] = {
    name: val,
    checked: $('input[name=' + val + ']:checked').val() ? true : false
  };
});

console.log(attributeVariables);
console.log('--------------------------------');
console.log('Radio Buttons Test Results');

var radios = ['thing3', 'thing4', 'thing5', 'thing6'];
$.each(radios, function(idx, name) {
  var radioValues = [];
  $.each($('input[name=' + name + ']'), function(i, radio) {
    radioValues.push({index: i, checked: radio.checked});
  });

  radios[idx] = {
    name: name,
    radioValues: radioValues
  };
});

console.log(radios);

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type="checkbox" name="thing1" checked>
<input type="checkbox" name="thing2">
<br/>
<input type="radio" name="thing3">
<input type="radio" name="thing3" checked>
<input type="radio" name="thing3">
<br/>
<input type="radio" name="thing4">
<input type="radio" name="thing4">
<input type="radio" name="thing4" checked>
<br/>
<input type="radio" name="thing5" checked>
<br/>
<input type="radio" name="thing6">

09-25 19:15