2012-07-16 54 views
0

我试图阻止默认的链接,因为我动态加载到页面使用jQuery的div,并为每个href的只是名称的页面之前(如href=home,并固定在加载代码home.php下面)。为什么不能防止默认链接?

//initialize home page as active on load up and deactivate link 
var activePage = $('a[href$="home"]'); 
var activePageHref = activePage.attr('href'); 
activePage.attr('href', '#'); 

$('a').click(function(e) { 
    e.preventDefault(); 
    //set the page clicked on 
    var page = $(this).attr('href'); 
    //check to see if there are any extras to url for php 
    var pageCheck = page.split('?'); 
    //sort page type 
    if (pageType == null) { 
     //dynamically load the page in div bodycontent 
     $('#bodycontent').load(page + '.php'); 
    } else { 
     $('#bodycontent').load(page + '.php?' + pageCheck[1]); 
    } 
    //pull up last disabled link for navigation 
    var setOld = $('a[href$="' + activePageHref + '"]'); 
    setOld.attr('href', '' + activePageHref + ''); 
    //set the new disabled link for navigation 
    activePage = page; 
    //make link inactive 
    $(this).attr('href', '#'); 
}); 

这是确定的,并在最后返回假的,直到我说更多的事情,我需要在点击事件函数发生,但准确的说,这部分:

//pull up last disabled link for navigation 
    var setOld = $('a[href$="' + activePageHref + '"]'); 
    setOld.attr('href', '' + activePageHref + ''); 
    //set the new disabled link for navigation 
    activePage = page; 
    //make link inactive 
    $(this).attr('href', '#'); 

现在电子。 preventDefault();这是从我所理解的正确的方式做我需要发生的事情,阻止整个事情发生在任何链接上。我卡住了。我只需要停止默认动作,并使用我已经添加的功能来创建导航。

而且添加,我有一个悬停功能依赖于这种导航的UL认证,但不包括,因为它不应该造成一个问题,但我可以把它放在这里,如果需要的。这是该文档就绪功能中唯一的其他功能。

+0

你在控制台上看到任何错误? – undefined 2012-07-16 01:13:19

+0

我不太确定如何做到这一点。 – Grant 2012-07-16 01:17:07

+1

如果您使用的是Firefox,则可以安装显示错误的萤火虫。 – undefined 2012-07-16 01:18:15

回答

5

更新时间:

既然你改变初始禁用链接的href,属性包含选择将无法再次找到它后,将它激活。我会建议做这个有点不同。

您可以捕获通过使用类整个“禁用链接”功能。如果您将某个类添加到应该“禁用”的链接,则可以防止浏览器仅跟踪具有该指定类的链接。

当您单击“已启用链接”,遵循它,然后让它禁用。然后,启用所有其他链接。

$('a').click(function() { 
    $(this).addClass('disabledLink'); 
    $('a').not(this).removeClass('disabledLink'); 
} 

然后,为整个文档设置一个事件侦听器,以防止对某个类的链接进行默认操作。

$(document).on('click', 'a.disabledLink', function(e) { 
    e.preventDefault(); 
} 

这应该达到你想要的效果(即它将取代你上面的整个'点击'处理程序)。请注意,href永远不会更改为'#'。


否则:只是缓存链接本身与它的HREF

//pull up last disabled link for navigation 
activePage.attr('href', '' + activePageHref + ''); 

//set the new disabled link for navigation 
activePage = $(this); 
activePageHref = $(this).attr('href'); 

//make link inactive 
$(this).attr('href', '#'); 

你这是造成JS引擎停止语法错误一起:

//pull up last disabled link for navigation 
$('a[href$="' + activePageHref + '"]').attr('href', '' + activePageHref + ''); 

//set the new disabled link for navigation 
activePage = page.attr('href'); 
/* THIS HERE RETURNS A STRING SO YOU CHANGE activePage to a string. */ 

// Should probably be: 
activePageHref = page.attr('href'); 

//make link inactive 
activePage.attr('href', '#'); 

之前打个电话调用此方法设置activePage是一个字符串,它没有方法.attr()因此它会引发错误并停止执行该函数。

+0

如果你检查你的控制台,你应该得到类似于“TypeError:object has no method'attr'”(至少在Chrome中)的东西 – nbrooks 2012-07-16 01:21:56

+0

我只是想出了如何在Firefox中。我没有太多用处。我确实有一个问题没有解决。由于页面加载到“主页”,因此我默认主页链接处于非活动状态。我需要将它改回活动状态,并试图用'var activePage = $('a [href $ =“home”]'); var activePageHref = activePage.attr('href'); var setOld = $('a [href $ =''+ activePageHref +'“]'); setOld.attr('href',''+ activePageHref +'');'也更新了我的脚本以反映我现在拥有的。 – Grant 2012-07-16 01:24:48

+0

@grant我更新了我的答案。看看,让我知道,如果这看起来可能是你需要的。 – nbrooks 2012-07-16 01:35:48