我正在构建一个laravel应用程序,我有一个jquery数据表填充了一些ajax数据,并有一些输入表单。表列由datatable列选项生成。问题是,当我发布数据时,它只得到最后一行,因为每个输入的名称是相同的。我试图改变使用jquery的名称属性。attr()和。prop(),但它没有工作。任何帮助都是感激的。
PS:如果你知道任何其他方式传递数据从表到数据库在laravel告诉我。
编辑1
$(document).ready(function(){
$( "tr" ).each(function(index) {
$("#id").attr('name',function(){
return "text"+index;
});
});
});
编辑2var table = $('#monthly_table').DataTable({
"paging": true,
"dom": "fr<'clear'>Ttip",
"ajax": "../ajax/data/objects.txt",
"tableTools": {/*buttons */},
"columns": [
{ "data": "kpi" },
{ "data": "workload" },
{
"className": '',
"orderable": false,
"defaultContent": '<input class="form-control month" type="month" />'
},
{
"className": '',
"orderable": false,
"defaultContent": '<input id="value" class="form-control" type="number" />'
},
{
"className": '',
"orderable": false,
"defaultContent": '<input id="comment" class="form-control" type="text" />'
},
{
"className": 'details-control',
"orderable": false,
"defaultContent": '<a href="#" class="fa fa-info-circle"/>'
},
{
"className": 'details-controlss',
"orderable": false,
"defaultContent": '<a href="#" class="fa fa-area-chart"/>'
},
{
"className": 'details-controls',
"orderable": false,
"defaultContent": '<a href="#" class="fa fa-table"/>'
}
],
"order": [[1, 'asc']]
});
您应该能够使用createdRow
回调来更新每行上的数据。此外,您的输入没有名称,因此我添加了默认名称(并删除了id),这将在createdRow
回调中更新:
var table = $('#monthly_table').DataTable({
"paging": true,
"dom": "fr<'clear'>Ttip",
"ajax": "../ajax/data/objects.txt",
"tableTools": {/*buttons */},
"columns": [
{ "data": "kpi" },
{ "data": "workload" },
{
"className": '',
"orderable": false,
"defaultContent": '<input name="month" class="form-control month" type="month" />'
},
{
"className": '',
"orderable": false,
"defaultContent": '<input name="value" class="form-control" type="number" />'
},
{
"className": '',
"orderable": false,
"defaultContent": '<input name="comment" class="form-control" type="text" />'
},
{
"className": 'details-control',
"orderable": false,
"defaultContent": '<a href="#" class="fa fa-info-circle"/>'
},
{
"className": 'details-controlss',
"orderable": false,
"defaultContent": '<a href="#" class="fa fa-area-chart"/>'
},
{
"className": 'details-controls',
"orderable": false,
"defaultContent": '<a href="#" class="fa fa-table"/>'
}
],
"order": [[1, 'asc']],
"createdRow": function(row, data, dataIndex) {
$(row).find('input').each(index, element) {
var $element = $(element);
$element.attr('name', $element.attr('name') + '-' + dataIndex);
}
}
});
另一个选项是使用data
键的函数,而不是defaultContent
键。然后,您不需要回调来更新名称,因为它们已经使用行索引生成了。
var table = $('#monthly_table').DataTable({
"paging": true,
"dom": "fr<'clear'>Ttip",
"ajax": "../ajax/data/objects.txt",
"tableTools": {/*buttons */},
"columns": [
{ "data": "kpi" },
{ "data": "workload" },
{
"className": '',
"orderable": false,
"data": function (row, type, val, meta) {
return '<input name="month-' + meta.row + '" class="form-control month" type="month" />'
}
},
{
"className": '',
"orderable": false,
"data": function (row, type, val, meta) {
return '<input name="value-' + meta.row + '" class="form-control" type="number" />'
}
},
{
"className": '',
"orderable": false,
"data": function (row, type, val, meta) {
return '<input name="comment-' + meta.row + '" class="form-control" type="text" />'
}
},
{
"className": 'details-control',
"orderable": false,
"defaultContent": '<a href="#" class="fa fa-info-circle"/>'
},
{
"className": 'details-controlss',
"orderable": false,
"defaultContent": '<a href="#" class="fa fa-area-chart"/>'
},
{
"className": 'details-controls',
"orderable": false,
"defaultContent": '<a href="#" class="fa fa-table"/>'
}
],
"order": [[1, 'asc']]
});
最后,您的第三个选择是仅将名称作为数组。现在,在您的服务器端处理中,您的月份、值和注释输入将是包含所有值的数组。
var table = $('#monthly_table').DataTable({
"paging": true,
"dom": "fr<'clear'>Ttip",
"ajax": "../ajax/data/objects.txt",
"tableTools": {/*buttons */},
"columns": [
{ "data": "kpi" },
{ "data": "workload" },
{
"className": '',
"orderable": false,
"defaultContent": '<input name="month[]" class="form-control month" type="month" />'
},
{
"className": '',
"orderable": false,
"defaultContent": '<input name="value[]" class="form-control" type="number" />'
},
{
"className": '',
"orderable": false,
"defaultContent": '<input name="comment[]" class="form-control" type="text" />'
},
{
"className": 'details-control',
"orderable": false,
"defaultContent": '<a href="#" class="fa fa-info-circle"/>'
},
{
"className": 'details-controlss',
"orderable": false,
"defaultContent": '<a href="#" class="fa fa-area-chart"/>'
},
{
"className": 'details-controls',
"orderable": false,
"defaultContent": '<a href="#" class="fa fa-table"/>'
}
],
"order": [[1, 'asc']]
});
这将改变(索引)所有td的名称:
$( "td" ).each(function(index, element) {
var $ele = $(element),
newName = $ele.attr('name')+index;
$ele.attr('name',newName);
});