JavaScript循环输入会创建一个对象数组

Dea*_*ano 16 javascript arrays jquery

我试图循环div中的输入元素,以创建一个对象数组

<div id="time">
  <input type="text" name="from" placeholder="12:00 AM" />
  <input type="text" name="to" placeholder="12:30 AM" />
  <input type="text" name="from" placeholder="13:00 AM" />
  <input type="text" name="to" placeholder="13:30 AM" />
</div>
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建以下对象数组.

 unavailability: [
      { from: '12:00', to: '12:30' },
      { from: '13:00', to: '13:30' }
    ]
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所尝试的,但结果却截然不同.

var dataArray = []
$("#time").find('input').each(function() {
  var data = {};

  data[this.name] = this.value
  dataArray.push(data);

});
console.log(dataArray)
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="time">
  <input type="text" name="from" placeholder="12:00 AM" />
  <input type="text" name="to" placeholder="12:30 AM" />
  <input type="text" name="from" placeholder="13:00 AM" />
  <input type="text" name="to" placeholder="13:30 AM" />
</div>
Run Code Online (Sandbox Code Playgroud)

的jsfiddle

Tus*_*har 12

您可以迭代所有名称属性值为的元素from.要获取to值,请使用next()jQuery方法.

使用.val()方法获取item的值.

$('#submit').click(function() {
  var data = [];

  $('#time input[name="from"]').each(function() {
    data.push({
      from: $(this).val(),
      to: $(this).next().val()
    });
  });

  console.log(data);
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Enter times in the below textboxes
<div id="time">
  <input type="text" name="from" placeholder="12:00 AM" />
  <input type="text" name="to" placeholder="12:30 AM" />
  <input type="text" name="from" placeholder="13:00 AM" />
  <input type="text" name="to" placeholder="13:30 AM" />
</div>

<button id="submit">Submit</button>
Run Code Online (Sandbox Code Playgroud)

  • 我认为他真正的目的是获得价值,而不是占位符。 (2认同)

End*_*ess 8

我会用FormData解决它.如果您稍后更改标记,则意味着更少的DOM导航和更少出错的可能性.这也意味着你必须将你的div元素更改为一个表单元素(除非你把它放在更高的位置 - 在这种情况下你可以在构造函数中使用该表单元素并保留div元素):

// Get a formdata instance
var fd = new FormData(time)

// Get all values
var from = fd.getAll('from')
var to = fd.getAll('to')

// Transform
var unavailable = from.map((from, i) => ({ from, to: to[i] }))

console.log({unavailable})
Run Code Online (Sandbox Code Playgroud)
<form id="time">
  <input type="text" name="from" placeholder="12:00 AM" value="12:00" />
  <input type="text" name="to" placeholder="12:30 AM"  value="12:30" />
  <input type="text" name="from" placeholder="13:00 AM" value="13:00" />
  <input type="text" name="to" placeholder="13:30 AM" value="13:30" />
</form>
Run Code Online (Sandbox Code Playgroud)

顺便说一句,你混合了12/24小时(13:00).它应该写成下午1点(?).

我也会改变类型type="time"以避免错误.它为您提供了一个很好的时间选择器,如果用户输入12或24小时值,它会对值进行标准化.如果需要,您还可以使用step/min/max/required进行更好的验证