web2py:如何根据回调结果阻止A()助手对<tr>的删除操作
实现根据回调返回值控制删除的方案
web2py内置的delete='tr'参数是无条件执行删除的,不管回调函数返回什么值,都会直接移除对应的<tr>元素,所以没法直接通过返回值阻止删除。要实现需求,得放弃内置的delete参数,改用自定义的AJAX逻辑来处理:
1. 修改A标签代码
去掉delete='tr',换成自定义的点击事件:
{{=A('Delete', _onclick=f"deleteRecord({r.id}); return false;")}}
2. 给目标添加标识属性
为了精准定位要删除的行,给对应的<tr>加上data-id属性:
<tr data-id="{{=r.id}}"> <!-- 表格单元格内容 --> </tr>
3. 编写自定义JS处理函数
在页面中添加JavaScript逻辑,根据回调的返回值决定是否删除行:
function deleteRecord(id) { $.ajax({ url: "{{=URL('service_record_del_request')}}", data: {id: id}, type: 'POST', success: function(response) { if (response.trim() === 'true') { // 数据库删除成功,移除对应行 document.querySelector(`tr[data-id="${id}"]`).remove(); } else { // 删除失败,提示用户 alert('删除失败,无法移除该行'); } }, error: function() { alert('请求出错,请稍后重试'); } }); }
4. 保持原回调函数不变
你的service_record_del_request函数无需修改,返回'true'或'false'即可:
@auth.requires_login() def service_record_del_request(): id = request.vars.id if db(db.service_record.id==id).delete(): return 'true' # 数据库删除成功,允许移除tr else: return 'false' # 数据库删除失败,不删除tr
内容的提问来源于stack exchange,提问作者JeffP
相关产品推荐
相关产品推荐

