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

SweetAlert确认后btn.click()未触发的问题排查与解决

问题分析与解决方案

你的问题核心在于事件参数传递不规范,以及ASP.NET WebForms的LinkButton回发逻辑与模拟点击的兼容问题,导致确认后的btn.click()无法触发回发。以下是具体修正方案:

1. 修正JavaScript函数

修改函数逻辑,确保事件参数正确传递、返回值明确,并且直接调用ASP.NET的回发函数替代模拟点击:

function sweetAlertConfirm(event, btn, title, msg, icon) {
    // 兼容不同浏览器的事件对象获取
    event = event || window.event;

    // 注意:dataset的属性值都是字符串类型,需用字符串判断
    if (btn.dataset.confirmed === 'true') {
        btn.dataset.confirmed = 'false';
        return true; // 允许触发回发
    } else {
        event.preventDefault(); // 阻止默认回发
        Swal.fire({
            icon: icon,
            title: title,
            text: msg,
            showDenyButton: true,
            showCancelButton: true,
            confirmButtonText: 'Yes',
            denyButtonText: `No`,
        }).then((result) => {
            if (result.isConfirmed) {
                btn.dataset.confirmed = 'true';
                // 直接调用ASP.NET的回发函数,比模拟点击更可靠
                __doPostBack(btn.name, '');
            }
        });
        return false; // 明确阻止默认行为
    }
}

2. 修改LinkButton的客户端点击事件

在OnClientClick中传递当前事件对象event,确保函数能正确捕获并处理事件:

<asp:LinkButton runat="server" Style="margin-right: 10px;" ID="cmdDeleteGoal"
   CommandArgument='<%# DataBinder.Eval(Container.DataItem, "GoalCode") %>'
   OnClientClick="return sweetAlertConfirm(event, this, 'Delete Goal?', 'Do you want to delete this goal?', 'question');"
   OnClick="cmdDeleteGoal_Click"  >
   <i class="fa-solid fa-trash text-danger" data-bs-toggle="tooltip"
      data-bs-placement="top"
      title="Delete Goal"></i>
</asp:LinkButton>

关键修改说明

  • 传递事件参数:避免依赖全局event对象,确保event.preventDefault()能稳定阻止初始回发。
  • 直接调用__doPostBack:ASP.NET LinkButton的回发逻辑本质是通过__doPostBack函数实现的,模拟点击可能因事件绑定优先级问题失效,直接调用该函数更可靠。
  • 明确返回值:第一次调用(未确认)返回false彻底阻止回发,确认后返回true允许回发,消除浏览器对undefined返回值的歧义处理。

内容的提问来源于stack exchange,提问作者mat mat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:04:57