You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 03:22:47