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

用户无对应权限时如何禁用非button元素绑定的onclick点击事件?

方案1:直接控制删除链接的点击事件与展示状态(体验更好)

步骤1:给删除a标签新增唯一标识类(仅需修改1行HTML)

给原有删除结构的a标签加delLink类,方便jQuery定位元素,修改后代码如下:

<span class="text-center"><a onclick ="deleteMsg('${emsg_id}')" class="delLink"><span class="text-danger" data-toggle="tooltip" data-placement="top" title="Delete"><em class="icon ni ni-trash"></em></span></a></span>

步骤2:新增删除权限判断逻辑

在原有jQuery权限判断代码后新增如下逻辑:

if(e.allowDel) {
  // 有权限:恢复点击事件、还原样式与提示文案
  $(".delLink").attr("onclick", function(i, origAttr) {
    return origAttr || $(this).data("origOnclick");
  }).css("opacity", 1).children("span").attr("title", "Delete");
  // 解绑之前绑定的阻止点击事件
  $(".delLink").off("click.preventDel");
} else {
  // 无权限:移除点击事件、置灰、修改提示、阻止所有点击行为
  $(".delLink").each(function() {
    // 先缓存原始的onclick属性,后续恢复权限时可以复用
    $(this).data("origOnclick", $(this).attr("onclick"));
  }).removeAttr("onclick")
  .css("opacity", 0.5) // 置灰提示不可点击
  .children("span").attr("title", "无删除权限")
  .end()
  // 绑定阻止点击事件,避免其他逻辑触发删除操作
  .on("click.preventDel", function(e) {
    e.preventDefault();
    e.stopPropagation();
    return false;
  });
}

方案2:修改删除执行函数增加前置校验(无需修改原有HTML结构)

如果不想改动现有HTML代码,直接给删除函数加权限校验即可:

// 先定义全局变量存储权限数据,接口返回权限后赋值
let userAuth = {}
// 接口请求成功拿到e后赋值
userAuth = e

function deleteMsg(msgId) {
  // 增加权限前置校验
  if(!userAuth.allowDel) {
    alert("您没有删除操作权限");
    return false;
  }
  // 原有删除逻辑保留在下方
  // ...
}

原有逻辑优化建议

你当前的按钮权限判断代码可以大幅简化,不需要写三元表达式,直接把布尔值传给prop方法即可,逻辑完全一致:

$("button.viewBtn").prop("disabled", !e.allowView);
$("button.addBtn").prop("disabled", !e.allowAdd);
$("button.editBtn").prop("disabled", !e.allowEdit);
$("button.deleteBtn").prop("disabled", !e.allowDel);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:39:00