从多个输入获取值而无需重写相同的代码

时间:2017-08-04 13:26:51

标签: javascript jquery arrays

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

2 个答案:

答案 0 :(得分:1)

正如评论所述,你不是console.log() - 正确的事情。否则你的代码几乎没问题。我认为您可以直接在val中使用each代替attributeVariables[index]

然后您可以执行条件检查,因为val()未选中复选框会返回undefined

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">

答案 1 :(得分:1)

试试这个。它可能有用......

var inputsObject = {};
$("input:checked").each(function() {
    inputsObject[$(this).attr("name")] = $(this).val()
})
console.log(inputsObject)

在inputsObject中,如果它们存在,你将拥有对(name =&gt; value)。