通过AJAX校验权限控制链接可点击性,手动触发click事件无效如何解决?
问题修复方案
核心问题原因
- jQuery的
click()方法只会触发你通过jQuery绑定的自定义事件处理逻辑,不会直接触发a标签的原生跳转默认行为,二次触发事件就算返回true也无法自动执行跳转。 - AJAX是异步请求,
success回调执行时已经脱离了用户主动点击的交互上下文,这时候触发的新开窗口(你的a标签设置了target="_blank")会被主流浏览器判定为非用户主动触发的恶意行为,直接拦截,这是你看不到页面跳转的最主要原因。
最优修复方案
不需要二次触发点击事件,权限校验通过后直接操作原生跳转即可,修改你代码中success回调的逻辑即可:
success: function (result) { if (result.success) { // 标记已授权,后续用户再点击该链接无需重复校验 anchor.data("authorized", true); const targetUrl = anchor.attr('href'); const openWay = anchor.attr('target'); // 直接执行跳转逻辑,绕过二次点击触发 if(openWay === '_blank'){ window.open(targetUrl); // 若遇浏览器拦截,可在此处补充提示用户允许弹窗的逻辑 }else{ window.location.href = targetUrl; } } else { alert('Not authorized'); } }
备选方案(必须触发点击逻辑时使用)
如果你确实需要触发完整的a标签点击行为,要调用原生DOM的点击方法,而非jQuery对象的点击方法:
success: function (result) { if (result.success) { anchor.data("authorized", true); // anchor是jQuery对象,取索引0拿到原生DOM元素,调用原生click方法 anchor[0].click(); } else { alert('Not authorized'); } }
注意:该方案仍存在新开窗口被浏览器拦截的可能,优先使用第一种方案。
内容的提问来源于stack exchange,提问作者Robert Smith
相关产品推荐
相关产品推荐

