我正在遍历一些项以将它们的值添加到数组中。然后,我将所有内容都放入一个对象中,并且一切正常,但是我尝试将每个elements[i]
添加为一个对象并为其设置一个唯一的名称没有成功。
如何创建一个对象“ steps”,其中包含两个名称分别为“ name1”和“ name2”的对象?
var steps = [];
var elements = $("#roi--calc input");
var results = $('#results');
results.on('click', function(){
for (var i = 0; i < elements.length; i++) {
if (elements[i].value.length != 0) {
steps.push({
value: elements[i].value
});
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js"></script>
<form id="roi--calc">
<input type="text" id="input1" data-name="name1" />
<input type="text" id="input2" data-name="name2" />
<input type="submit" id="results" value="submit" />
</form>
答案 0 :(得分:1)
我建议使用对象而不是数组。您可以使用输入元素的data-name
作为键将值存储在对象中。为了确保您的对象始终是最新的,请在每次form
遇到input
事件时进行调整:
const steps = {}
document.getElementById('roi--calc').addEventListener('input', function(evt) {
const input = evt.target
if (input.checked || input.value.length) {
steps[input.dataset.name] = {
value: input.value
}
} else {
delete steps[input.dataset.name]
}
console.log(steps);
})
<form id="roi--calc">
<input type="checkbox" value="checkbox" id="cb1" data-name="name0" />
<input type="text" id="input1" data-name="name1" />
<input type="text" id="input2" data-name="name2" />
</form>
答案 1 :(得分:0)
您可以使用以下内容:
var steps = {};
steps[elements[i].name] = elements[i].value;
<form id="roi--calc">
<input type="text" id="input1" name="name1" />
<input type="text" id="input2" name="name2" />
</form>
答案 2 :(得分:0)
尝试一下:
var steps = {};
var elements = $("#roi--calc input");
for (var i = 0; i < elements.length; i++) {
if (elements[i].value) {
steps[elements[i].name] = elements[i].value;
}
}
答案 3 :(得分:0)
您可以进一步研究多个JavaScript概念,以解决此问题:
结合这些知识,我们可以实施示例解决方案:
const steps = {};
const elements = $("#roi--calc input");
for (var i = 0; i < elements.length; i++) {
const element = elements[i];
const key = element.dataset.name;
if ((elements[i].checked) || (elements[i].value.length != 0)) {
if (!steps[key]) {
steps[key] = [];
}
steps[key].push({
value: elements[i].value
});
}
}