如何从多个文本框中获取输入

时间:2015-07-20 23:53:40

标签: javascript jquery html5 dom

我刚刚开始使用JavaScript和Jquery,并遇到了障碍。我希望用户能够添加&减去框并用输入填充。这是我的HTML

<body>

<h1>Math Grades</h1>
<div id="mathGrades">
  <input style="height:50px; width:50px; font-size:16pt; text-align: center" type='number' id="fooBar">
  <input style="height:50px; width:50px; font-size:16pt; text-align: center" type='number' id="fooBar">
</div>

<button type="button" id="addBox">+</button>
<button type="button" id="subtractBox">-</button>

<br>
<button type="button" id="getGrades">Submit Grades</button>

<script src="calcjq.js"></script>

  

这是我的代码:

$(document).ready(function() {

var addMathBox = document.getElementById("addBox");
addMathBox.addEventListener('click', addBox, false);

var subtractMathBox = document.getElementById("subtractBox");
subtractMathBox.addEventListener('click', subtractBox, false);

var getScores = document.getElementById("getGrades");
getScores.addEventListener('click', getUserGrades, false);

function getUserGrades(){
    var userGrades = document.getElementById("fooBar").value;
    console.log(userGrades);
}

function subtractBox(){
    $('#fooBar').remove()
}

function addBox(){
    $('#mathGrades').append('<input style="height:50px; width:50px; font-size:16pt; text-align: center" type="number" id="fooBar">')
};


});

如何确保收集所有输入而不知道他们将添加和填充多少个框?

修改

终于找到了一种方法:

var mathGrades = $("input[class='mathGrades']")
            .map(function(){return parseInt($(this).val(), 10);}).get();

1 个答案:

答案 0 :(得分:0)

首先,您可能知道这一点,但我想以任何方式指出它,您的id属性对于每个元素应该是唯一的。因此,请确保它们并非对所有人都有效。

你可以做些什么来解决你的问题是为每个输入添加一个唯一的类,即mathGrades,然后使用以下代码收集所有数据并随意使用它。

var mathGrades = document.getElementsByClassName('mathGrades');
var m, v;
for(m in mathGrades) {
    v = $(mathGrades[m]).val(); // takes value and converts to string i.e. "1"
    $(mathGrades[m]).val(v+1); // assigns new value "1" + "1" = "11"
}

在您的javascript中,您可以将addBox函数更改为:

function addBox() {
    $('#mathGrades').append('<input style="height:50px; width:50px; font-size:16pt; text-align: center" type="number" class="mathGrades">')
};