你好,
这是一个有点棘手的情况,我需要一些建议。
我的项目中有几个像这样的href。
<a class="not-allowed" href="javascript:void(0)" onclick="showSettingDiv();">Change</a>
<a class="" href="javascript:void(0)" onclick="DeleteSettingDiv();">Delete</a>
根据登录用户的类型,我必须让一些链接什么也不做,并触发别的东西。
我有这个功能来实现这个目标:
$('.not-allowed').each(function (e) {
$(this).click(function (e) {
e.preventDefault();
alert("you dont have permission");
})
});
这会触发警报,但是它也会执行我的onclick功能。有没有办法我可以停止所有的javascript函数并执行上面这个?
我意识到我可以使用.removeAttr()
,但我不确定这是不是最好的方法。我的意思是我可能有限制按钮或复选框和单选按钮禁用。
e.preventDefault
不会照顾我猜的所有内容。无论如何,我如何阻止所有javascript函数?
感谢。
答案 0 :(得分:2)
.preventDefault()
对内联事件处理程序没有影响。您需要完全删除该功能。试一试:
$('.not-allowed').each(function(i, elem) {
elem.onclick = null;
$(this).click(function (e) {
e.preventDefault();
alert("you dont have permission");
})
});
关于jsfiddle的简化示例:http://jsfiddle.net/cJcCJ/
答案 1 :(得分:2)
是。它被称为Capture mode。它适用于兼容DOM的浏览器。看看你的JS框架是否为你提供了这个功能。
如果捕获EventListener希望阻止进一步处理事件,则可以调用Event接口的stopProgagation方法。
一个简单的例子:
<html>
<body>
<button class="not-allowed" id="btn1" onclick="alert('onclick executed');">BTN1</button>
<button id="btn2" onclick="alert('onclick executed');">BTN2</button>
<script type="text/javascript">
document.addEventListener("click", function (event) {
if (event.target.className.indexOf("not-allowed") > -1) {
event.stopPropagation(); // prevent normal event handler form running
event.preventDefault(); // prevent browser action (for links)
}
}, true);
</script>
</body>
<html>
答案 2 :(得分:0)
您可以在父元素上绑定click
事件,然后在“非活动”元素上绑定另一个单击事件,这将调用e.stopPropagation();
以防止事件冒泡到父元素。< / p>
另一个解决方案是给予已禁用的元素一个类并在处理程序中执行if($(this).hasClass('disabled')) return;
。
答案 3 :(得分:0)
您需要修改onclick
(showSettingDiv
,DeleteSettingDiv
)中的功能以检查权限。
BTW,请确保您不仅要检查JavaScript中的权限,还必须在服务器端执行此操作,或者它很容易操作。