【问题标题】:jQuery - Add e.preventDefault() to all links click events?jQuery - 将 e.preventDefault() 添加到所有链接点击事件?
【发布时间】:2011-08-02 14:06:07
【问题描述】:

我正在用 jQuery 编写脚本,并且我有很多点击链接点击事件。问题是我不希望我有点击事件的链接除了事件之外做任何事情,所以我在所有点击事件的开头放置了一个e.preventDefault();。但是我有很多点击事件,那么有没有更简单的方法可以将e.preventDefault(); 添加到所有链接点击事件中?请记住,我也有一些我想按其应有的方式工作的链接,因此将e.preventDefault(); 添加到所有链接将不起作用,我只想将其添加到具有点击事件的链接中。

【问题讨论】:

  • 有什么方法可以通过类名等定义a 元素组,您希望保留它们的正常功能?

标签: javascript jquery


【解决方案1】:

我会进一步考虑@3nigma 的回答。通常您不想对其执行默认操作的链接如<a href="#">

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

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

此处示例:Filter a tags containing #

【讨论】:

    【解决方案2】:

    您可以在任何绑定代码运行之前尝试覆盖绑定方法或点击方法。在这里,我以一种相当老套的方式覆盖了 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/

    【讨论】:

    • 伙计,我希望我没有写那个。它看起来和感觉有点脏。
    【解决方案3】:

    你可以使用 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

    【讨论】:

    • 是的,但是那样我需要为每个链接添加一个类,而且我也不想要那个......我想要 e.preventDefault();在每个链接点击事件开始时自动添加。
    【解决方案4】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-11
      • 2011-04-30
      相关资源
      最近更新 更多