传递信息的方法,除了添加隐藏属性的信息之外,还可以添加自定义属性。可以在{% for %}循环中这样定义:
<td clsid=" {{row.clsid}} "> {{row.title}}</td>
这样就传递了一个自定义属性:clsid,可以以此来标识这条记录。
<a class="btn-edit">对话框编辑班级信息</a>
<script>
$('.btn-edit').click(function()){
$(#shadow,#editModal).removeClass('hide');
//获取当前标签,并且找到父标签。a标签只定义了一个class,这时$(this)就是当前标签
var tds = $(this).parent().prevAll();
var studentId = $(tds[2]).text();//从当前标签向前数,从0开始,是第2个td的信息,所以是tds[2]
var studentName = $(tds[1]).text();
var classId = $(tds[0]).attr('clsid');//本次获取标签的clsid属性的值,不是获取文本
$(#editId).val(studentId);
$(#editName).val(studentName);
$(#editClassId).val(classId);
}
$('#btnEdit').click(function(){
//更新学生信息,点击后需要发送Ajax请求。先拿到值
$.ajax({
url:'/modal_edit_student/', //注意这里需要在URL中定义的地址
type:'POST',
data:{'nid':$('#edtiId').val(),'name':$('#edtiName').val(),'class_id':$('#edtiClassId').val()}
dataType:'JSON', //这样就不用JSON.parse(arg)
success:function(arg){
//这里省略JSON.parse(arg),因为有dataType定义
if(arg.status){
location.reload()
}else{
$('#editError').text=arg.message;
}
}
})
})
</script>
然后,编辑框可以这样设置:
<div id="editModal" class="add-modal hide">
<h3>编辑学生信息</h3>
姓名:<input id="editName" type="text" name="name" placeholder="姓名" />
<input type="text" id="editId" style="display:none" />备注:注意这里是把editId隐藏保存在这里
......
班级:
<select id="editClassId" name="classId">
{% for row in class_list %}
<input id="btnEdit" type="button" value="更新" />
<span id="editError" style="color:red;"></span>
最终实现modal_edit_student函数,这个函数对应Ajax定义中对应的URL地址。
def modal_edit_student():
ret = {'status':True,'message':None}
try:
nid = request.POST.get('nid')
class_id = request.POST.get('class_id')
name = request.POST.get('name')
sqlhelper.modify("update student set name=%s,class_id=%s where id=%s",[name,class_id,nid,])
except Exception as e:
ret['status']=False
ret['message']=str(e)
return HttpResponse(json.dumps(ret))