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