Laravel 5: 请求中的动态数组
Laravel 5: Dynamic Array in Request
我有一个 table 由三个输入值和一个 "Add" 按钮组成。当按下 "Add" 按钮时,输入值将 "saved" 放入该行,并创建一个新行。提交表单后,我要做的是以数组格式获取输入的每一行。但是,请求要么只获取最新的行(无论如何都没有添加),要么根本不获取任何内容。我做错了什么?
我的代码,供参考:
<table id="data_table" class="table table-striped table-responsive">
<thead>
<tr>
<th>Company Name</th>
<th>Years at Company</th>
<th>Months at Company</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td class="no-leftpad"><input type="text" id="new_name" class="length"></td>
<td>
<select id="new_years" class="form-control">
<option value="-">-</option>
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10+</option>
</select>
</td>
<td>
<select id="new_months" class="form-control">
<option value="-">-</option>
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
</select>
</td>
<td>
<input type="button" class="add" onclick="add_row();" value="Add">
</td>
</tr>
</tbody>
</table>
....
function add_row() {
var new_companyname=document.getElementById("new_name").value;
var new_years=document.getElementById("new_years").value;
var new_months=document.getElementById("new_months").value;
var table=document.getElementById("data_table");
var table_len=(table.rows.length)-1;
var row = table.insertRow(table_len).outerHTML="<tr id='row"+table_len+"'>"
+"<td id='companyname_row"+table_len+"'>"
+"<input type='text' name='company_name["+table_len+"][company_name]' value='"+new_companyname+"' disabled>"
+"</td>"
+"<td id='years_row"+table_len+"'>"
+"<input type='text' name='company_years["+table_len+"][company_years]' value='"+new_years+"' disabled>"
+"</td>"
+"<td id='months_row"+table_len+"'>"
+"<input type='text' name='company_months["+table_len+"][company_months]' value='"+new_months+"' disabled>"
+"</td>"
+"<td>"
+"<a type='button' value='Delete' class='fa fa-trash-o delete' onclick='delete_row("+table_len+")'></a></td></tr>";
document.getElementById("new_companyname").value="";
document.getElementById("new_years").value="";
document.getElementById("new_months").value="";
}
再敲了一点,我意识到问题所在:将输入设置为 "disabled" 会阻止 Request 获取它。通过将其切换为 "readonly" 我能够获得所需的效果并仍然获得数组。
虽然这确实让我好奇为什么请求不接受禁用的输入,如果有人想解决这个问题的话。
function add_row()
好像有错别字:
document.getElementById("new_companyname").value="";
应该是:
document.getElementById("new_name").value="";
此外,如果您想临时保留行,可以将其推送到函数 add_row()
中的数组,例如:
var companyList = [];
function add_row() {
...
companyList.push({
companyName:new_companyname,
yearsAtCompany:new_years,
monthsAtCompany:new_months
});
...
}
我有一个 table 由三个输入值和一个 "Add" 按钮组成。当按下 "Add" 按钮时,输入值将 "saved" 放入该行,并创建一个新行。提交表单后,我要做的是以数组格式获取输入的每一行。但是,请求要么只获取最新的行(无论如何都没有添加),要么根本不获取任何内容。我做错了什么?
我的代码,供参考:
<table id="data_table" class="table table-striped table-responsive">
<thead>
<tr>
<th>Company Name</th>
<th>Years at Company</th>
<th>Months at Company</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td class="no-leftpad"><input type="text" id="new_name" class="length"></td>
<td>
<select id="new_years" class="form-control">
<option value="-">-</option>
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10+</option>
</select>
</td>
<td>
<select id="new_months" class="form-control">
<option value="-">-</option>
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
</select>
</td>
<td>
<input type="button" class="add" onclick="add_row();" value="Add">
</td>
</tr>
</tbody>
</table>
....
function add_row() {
var new_companyname=document.getElementById("new_name").value;
var new_years=document.getElementById("new_years").value;
var new_months=document.getElementById("new_months").value;
var table=document.getElementById("data_table");
var table_len=(table.rows.length)-1;
var row = table.insertRow(table_len).outerHTML="<tr id='row"+table_len+"'>"
+"<td id='companyname_row"+table_len+"'>"
+"<input type='text' name='company_name["+table_len+"][company_name]' value='"+new_companyname+"' disabled>"
+"</td>"
+"<td id='years_row"+table_len+"'>"
+"<input type='text' name='company_years["+table_len+"][company_years]' value='"+new_years+"' disabled>"
+"</td>"
+"<td id='months_row"+table_len+"'>"
+"<input type='text' name='company_months["+table_len+"][company_months]' value='"+new_months+"' disabled>"
+"</td>"
+"<td>"
+"<a type='button' value='Delete' class='fa fa-trash-o delete' onclick='delete_row("+table_len+")'></a></td></tr>";
document.getElementById("new_companyname").value="";
document.getElementById("new_years").value="";
document.getElementById("new_months").value="";
}
再敲了一点,我意识到问题所在:将输入设置为 "disabled" 会阻止 Request 获取它。通过将其切换为 "readonly" 我能够获得所需的效果并仍然获得数组。
虽然这确实让我好奇为什么请求不接受禁用的输入,如果有人想解决这个问题的话。
function add_row()
好像有错别字:
document.getElementById("new_companyname").value="";
应该是:
document.getElementById("new_name").value="";
此外,如果您想临时保留行,可以将其推送到函数 add_row()
中的数组,例如:
var companyList = [];
function add_row() {
...
companyList.push({
companyName:new_companyname,
yearsAtCompany:new_years,
monthsAtCompany:new_months
});
...
}