如何禁用某些元素的e.preventDefault

时间:2014-02-27 03:30:07

标签: javascript jquery html twitter-bootstrap

我正在使用OnePage模板的bootstrap,我无法点击链接,或者无法切换单选按钮,有人说我正在使用e.preventDefault()

打开此页面http://abi.maxinrui.com/,当您点击该页面上的“点击我”时,您会看到我的意思。

我检查了js文件,有很多e.preventDefault(),我不知道如何修改它们。

有没有办法禁用e.preventDefault()?

我希望在我的OnePage模板中有一些超链接到另一个网站,所以这就是我的想法:我给一些特定元素一个ID或类,然后我写一些js,禁用e.perventDefault()仅用于这些元素。

有人知道怎么做吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

如果你正在使用jQuery来处理你的事件,那么它是可能的!

首先,小提琴(完全效果的外壳):http://fiddle.jshell.net/UN5WE/show/
以下是编辑的实际小提琴:http://jsfiddle.net/UN5WE/

基本上,我们正在修改jQuery的Event对象,特别是在原型上找到的preventDefault方法。我们保留了重新启用preventDefault的参考。

修改
对于您的特定用例,这是一种禁用preventDefault(基于类)的方法。只需在加载jQuery后运行此脚本:

jQuery.Event.prototype.preventDefault = (function(){
    var originalFunc = jQuery.Event.prototype.preventDefault;
    return function(){
        if($(this.target).hasClass('disableDefault')) {return;}
        originalFunc.call(this);
    }
}())

在调用preventDefault之前,这将检查目标是否具有disableDefault类。如果是,则立即返回(允许默认发生)。要测试您的页面,请将该代码复制到控制台中,然后运行:$('h1').addClass('disableDefault')

答案 1 :(得分:1)

我认为不可能,或者至少不是我能想到的简单方法,如果使用bind设置它们,你可以取消绑定处理程序,但这也会删除它们的任何行为,但是你可以使用变通方法,为链接添加新的事件处理程序,我建议您向外部锚点添加一个特殊类,然后从中获取href属性并使用window.open打开一个新选项卡,如下所示:

http://jsfiddle.net/yV78E/2/

html

<a href="http://api.jquery.com/?s=selector" class="externalLink" target="_blank">Hey</a>

js

// Similar behavior that might be on your site  

$('a').click(function(e){
   e.preventDefault();
    // some code
});

// Use the code below as a workaround

$('.externalLink').click(function(e){
    var targetLink = $(this).attr('href'); 
    window.open(targetLink, '_blank');
});

您只需要上面脚本的第二部分,因为第一部分只是为了模拟您的问题。