我正在尝试为每个被检查的行在表单内部创建一个隐藏输入,并且我想要使用来自隐藏列的ID插入每个隐藏输入的值。
这是我到目前为止所拥有的:
.on('check.bs.table check-all.bs.table', function (row) {
var selects = $('#users-table').bootstrapTable('getSelections');
ids = $.map(selects, function (row) {
return row.id;
});
var input = document.createElement("input");
input.setAttribute('type', 'hidden');
input.setAttribute('name', 'delete['+ids+']');
input.setAttribute("id", 'delete['+ids+']');
input.setAttribute('value', 'delete['+ids+']');
//append to form element that you want .
document.getElementById("deleteModalForm").appendChild(input);
})
它正在为我想要的每个盒子创建一个新的隐藏输入,但我遇到的问题是它将ID加在一起。这是一个发生什么的例子:
<input value="delete[3]" id="delete[3]" name="delete[3]" type="hidden">
<input value="delete[3,2]" id="delete[3,2]" name="delete[3,2]" type="hidden">
我想要它做的是:
<input value="delete[3]" id="delete[3]" name="delete[3]" type="hidden">
<input value="delete[2]" id="delete[2]" name="delete[2]" type="hidden">
如果有帮助我使用Bootstrap Data Table
有人可以帮帮我吗?
编辑:这是JSFiddle。当您选中该框时,它将添加一个新输入,您将看到每个输入都加入了数字。对于此示例,我没有使用type="hidden"
答案 0 :(得分:1)
我使用star
stars.pop()
更新代码
.on('check.bs.table', function (e, row) {
var selects = $table.bootstrapTable('getSelections');
stars = $.map(selects, function (row) {
return row.stargazers_count;
});
stars = stars.pop();
var input = document.createElement("input");
input.setAttribute('type', 'text');
input.setAttribute('name', 'delete['+stars+']');
input.setAttribute("id", 'delete['+stars+']');
input.setAttribute('value', 'delete['+stars+']');
//append to form element that you want .
document.getElementById("deleteModalForm").appendChild(input);
$result.text('Event: check.bs.table');
})
工作Fiddle
答案 1 :(得分:1)
为什么不直接使用row.stargazers_count
?
row
是当前所选行的对象,row.stargazers_count
表示data-field='stargazers_count'
列的行值。
input.setAttribute('value', 'delete['+row.stargazers_count+']');
getSelections
执行相同的工作,但它会将所有选定的行转换为对象,因此您必须提取最后一行:
var selects = $table.bootstrapTable('getSelections');
var stars = selects[selects.length-1].stargazers_count;
input.setAttribute('value', 'delete['+stars+']');
但这对数组来说是不必要的操作,因为你手上有row
权利,为此你将它传递给事件:
.on('check.bs.table', function (e, /* here it is: */ row){
您的代码存在更多问题:
当您重复输入名称时,这不起作用:
input.setAttribute('name', 'delete['+row.stargazers_count+']');
使用它,它将在提交时自动创建名称数组:
input.setAttribute('name', 'delete[]');
这也不会起作用,因为你重复输入id(它们必须是唯一的):
input.setAttribute("id", 'delete['+row.stargazers_count+']');
改为使用row.id
:
input.setAttribute("id", 'delete_'+row.id);
为什么要一起加入ID?
.map()
将数组或对象中的所有项目翻译为新的项目数组。