jQuery - 将e.preventDefault()添加到所有链接点击事件?

时间:2011-04-10 17:56:07

标签: javascript jquery

我在jQuery中制作一个脚本,我有很多点击链接点击事件。问题是我不希望我点击事件的链接除了事件之外做任何事情,所以我在所有点击事件的开始处放置e.preventDefault();。但是我有很多点击事件,那么有没有更简单的方法将e.preventDefault();添加到所有链接点击事件?请记住,我还有一些我希望按照自己的意愿工作的链接,因此将e.preventDefault();添加到所有链接将无效,我只想将其添加到具有点击事件的链接中。

4 个答案:

答案 0 :(得分:5)

您可以使用jquery名称空间事件

http://docs.jquery.com/Namespaced_Events

HTH

对于要添加点击事件但阻止默认行为的链接,您可以执行类似的操作

$('a.someClass').bind('click.dontClick',function(e){

e.preventDefault();

});

以及您想要正常点击行为的链接

$('a.clickClass').bind('click.doClick',function(e){

//your event handling code here

});

DEMO

答案 1 :(得分:3)

您可以尝试在任何绑定代码运行之前覆盖bind方法或click方法。在这里,我以一种相当hacky的方式覆盖了click方法。我真的建议你在需要的地方调用preventDefault。

(function(){
    var original = jQuery.fn.click;
    jQuery.fn.click = function(){
        // wrap your function in another function
        var f = arguments[0];
        arguments[0] = function(e) {
            e.preventDefault();
            f(e);
        }
        original.apply( this, arguments );
    }
})();

行动中的示例:http://jsfiddle.net/k4jzb/

答案 2 :(得分:0)

This SO answer详细说明了如何检测元素上的事件,但看起来提问者接受了这个答案,而built a jQuery plugin则根据事件监听器选择元素。

所以你可以使用那个插件,然后像这样使用一些事件委托:

$(document).delegate('a:Event(click)', 'click', function (e) { e.preventDefault(); });

警告:我自己从未使用过这个插件,而且我对自定义jQuery CSS过滤器并不熟悉,所以这可能实际上并不起作用。完全没有。

答案 3 :(得分:0)

我会更进一步回答@ 3nigma的回答。通常,您不想执行默认操作的链接类似于<a href="#">

因此请过滤掉这些链接,以便点击时页面不会跳转。我使用jQuerys filter()函数。不确定这是否是最好的。你觉得怎么样?

$('a').filter(function(i) {
return $(this).attr("href") === "#";
})
.bind('click.dontClick',function(e){
e.preventDefault();
})

此处示例:Filter a tags containing #