应用场景
在页面表格中,每行之前添加checkbox用于选择,在表头有check all的选择.选择以后,可以通过delete按钮,删除选择的当列数据.
代码实现
html文件 生成method='post'的表格,checkbox,删除按钮
{% csrf_token %}
Delete
TilteSummary
{% for new in news %}
{{ new.title }}{{ new.summary }}{% endfor %}
javascript代码 参考Bootstrap之表格checkbox复选框全选
本身js功能里面具备了遍历表格加checkbox的功能,但是考虑到django模板与需要传递checkbox中生成的vaule问题,所以用django模板来森广场多选框,利用js来实现全选与选择的css效果渲染
$(function () {
function initTableCheckbox() {
var $thr = $('table thead tr');
var $checkAllTh = $('
');/*将全选/反选复选框添加到表头最前,即增加一列*/
//$thr.prepend($checkAllTh);
/*“全选/反选”复选框*/
var $checkAll = $thr.find('input');
$checkAll.click(function (event) {
/*将所有行的选中状态设成全选框的选中状态*/
$tbr.find('input').prop('checked', $(this).prop('checked'));
/*并调整所有选中行的CSS样式*/
if ($(this).prop('checked')) {
$tbr.find('input').parent().parent().addClass('warning');
} else {
$tbr.find('input').parent().parent().removeClass('warning');
}
/*阻止向上冒泡,以防再次触发点击操作*/
event.stopPropagation();
});
/*点击全选框所在单元格时也触发全选框的点击操作*/
$checkAllTh.click(function () {
$(this).find('input').click();
});
var $tbr = $('table tbody tr');
var $checkItemTd = $('
');/*每一行都在最前面插入一个选中复选框的单元格*/
//$tbr.prepend($checkItemTd);
/*点击每一行的选中复选框时*/
$tbr.find('input').click(function (event) {
/*调整选中行的CSS样式*/
$(this).parent().parent().toggleClass('warning');
/*如果已经被选中行的行数等于表格的数据行数,将全选框设为选中状态,否则设为未选中状态*/
$checkAll.prop('checked', $tbr.find('input:checked').length == $tbr.length ? true : false);
/*阻止向上冒泡,以防再次触发点击操作*/
event.stopPropagation();
});
/*点击每一行时也触发该行的选中操作*/
$tbr.click(function () {
$(this).find('input').click();
});
}
initTableCheckbox();
});
view层代码实现接受post的信息,删除数据
def editor_delete(request):
checkList = request.POST.getlist('checkbox')
btnVal = request.POST.get('btnDelete')
if checkList and btnVal == 'btnDelete':
for newId in checkList:
New.objects.filter(id=newId).delete()
messages.success(request, r"Selected for Editor" + " is deleted.")
checkList.remove(newId)
elif btnVal == 'btnDelete':
messages.error(request, r"Deleted for Editor" + " is not Selected.")
else:
pass