精彩文章免费看

Django架构中使用ajax建立checkbox并传输参数

应用场景

在页面表格中,每行之前添加checkbox用于选择,在表头有check all的选择.选择以后,可以通过delete按钮,删除选择的当列数据.

html文件 生成method='post'的表格,checkbox,删除按钮

<form id="form" class="form-horizontal" method="post">    
{% csrf_token %}
<button class="btn btn-danger" type="submit" id="btnDelete" name="btnDelete" value="btnDelete">    Delete <i class="fa fa-minus"></i></button>
<table class="table table-bordered table-striped table-hover" id="datatable-default">    
  <thead>    
      <th><input type="checkbox" name="checkAll" id="checkAll"/></th>
      <th>Tilte</th>        
      <th>Summary</th>    
  </thead>    
  <tbody>    
{% for new in news %}        
    <td><input type="checkbox" name="checkbox" id="checkbox" value="{{ new.id }}"/></td>            
    <td valign="">{{ new.title }}</td>            
    <td>{{ new.summary }}</td>        
{% endfor %}    
  </tbody>
</table>

javascript代码 参考Bootstrap之表格checkbox复选框全选
本身js功能里面具备了遍历表格加checkbox的功能,但是考虑到django模板与需要传递checkbox中生成的vaule问题,所以用django模板来森广场多选框,利用js来实现全选与选择的css效果渲染

<script>
        $(function () {
            function initTableCheckbox() {
                var $thr = $('table thead tr');
                var $checkAllTh = $('<th><input type="checkbox" id="checkAll" name="checkAll" /></th>');
                /*将全选/反选复选框添加到表头最前,即增加一列*/
                //$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 = $('<td><input type="checkbox" name="checkbox"/></td>');
                /*每一行都在最前面插入一个选中复选框的单元格*/
                //$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();
    </script>

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:
最后编辑于:2017-12-04 02:27