用另一个javascript取消onClick javascript函数

时间:2011-03-04 14:17:30

标签: javascript jquery

你好,

这是一个有点棘手的情况,我需要一些建议。

我的项目中有几个像这样的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函数?

感谢。

4 个答案:

答案 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)

您需要修改onclickshowSettingDivDeleteSettingDiv)中的功能以检查权限。

BTW,请确保您不仅要检查JavaScript中的权限,还必须在服务器端执行此操作,或者它很容易操作。