如何用jQuery点击其他div后激活/停用#goTo的onclick属性(不移除)
解决思路:不用移除onclick属性,切换点击功能开关
嘿,我完全懂你的需求——不想动#goTo的onclick属性,只是想通过其他div来切换它的点击功能是否生效对吧?这有几个实用的方案,不用移除属性就能搞定:
方案1:用状态变量控制原函数执行
这个方案适合你能修改onclick对应函数代码的情况,核心是加一个开关变量,让原函数根据开关决定是否执行逻辑:
- 先定义一个开关变量(可以放在全局或者闭包内,避免污染全局环境):
// 默认是启用状态 let isGoToClickEnabled = true;
- 修改你的
onclick对应函数,在开头加开关判断:
function goToClickHandler() { // 如果开关关闭,直接返回,不执行后续逻辑 if (!isGoToClickEnabled) return; // 这里写你原来的点击逻辑 console.log("#goTo的点击功能执行了"); // 比如 window.location.href = "目标地址"; }
- 给控制开关的div绑定点击事件,切换开关状态:
// 假设控制开关的div类是toggle-goTo document.querySelector('.toggle-goTo').addEventListener('click', function() { isGoToClickEnabled = !isGoToClickEnabled; // 可以加个视觉反馈,比如修改按钮文字 this.textContent = isGoToClickEnabled ? "停用#goTo点击" : "启用#goTo点击"; });
方案2:事件捕获拦截原onclick执行
如果你的onclick是写在HTML里的内联属性(比如<div id="goTo" onclick="xxx()">),不想修改原函数代码,那可以用事件捕获来拦截:
- 定义开关变量并获取目标元素:
let isGoToClickEnabled = true; const goToEl = document.getElementById('goTo');
- 添加一个捕获阶段的事件监听,它会比内联的
onclick先执行,用来拦截:
// 第三个参数true表示在捕获阶段触发,优先级高于内联事件 goToEl.addEventListener('click', function(e) { if (!isGoToClickEnabled) { // 阻止后续事件执行,包括内联的onclick e.stopImmediatePropagation(); e.preventDefault(); } }, true);
- 同样给控制div绑定切换开关的逻辑:
document.querySelector('.toggle-goTo').addEventListener('click', function() { isGoToClickEnabled = !isGoToClickEnabled; });
为什么这两个方案比removeAttr()好?
- 你不用操心保存原
onclick的属性值,属性一直留在元素上,随时可以通过开关恢复功能 - 逻辑更清晰,开关状态一目了然,后续维护也方便
内容的提问来源于stack exchange,提问作者joe
相关产品推荐
相关产品推荐

