Javascript 为什么不是';这难道不能阻止默认链接吗?

Javascript 为什么不是';这难道不能阻止默认链接吗?,javascript,jquery,ajax,menu,hyperlink,Javascript,Jquery,Ajax,Menu,Hyperlink,我试图阻止默认链接,因为我使用jQuery将页面动态加载到div中,每个like的href只是页面前面的名称(例如,href=home,并固定在下面的代码中加载到home.php) 在我添加了更多需要在click event函数中发生的事情之前,在结尾处使用return false是可以的,但准确地说,这部分: //pull up last disabled link for navigation var setOld = $('a[href$="' + activePageHref +

我试图阻止默认链接,因为我使用jQuery将页面动态加载到div中,每个like的href只是页面前面的名称(例如,
href=home
,并固定在下面的代码中加载到home.php)

在我添加了更多需要在click event函数中发生的事情之前,在结尾处使用return false是可以的,但准确地说,这部分:

//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', '#');
现在是e.preventDefault();,从我的理解来看,做我需要做的事情的正确方法是阻止整个事情在任何链接上开火。我卡住了。我只需要停止默认操作,并使用我在最后添加的附加功能构建的功能,使我的导航变得漂亮


另外要补充的是,我确实有一个与这个导航的ul绑定的悬停功能,但是没有包括它,因为它不应该引起问题,但是如果需要的话,我可以把它放在这里。这是此文档就绪功能中唯一的其他内容。

更新:

由于您最初更改了禁用链接的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()
,因此它会抛出错误并停止函数的执行。

更新:

由于您最初更改了禁用链接的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()
,因此它会引发错误并停止函数的执行。

您在控制台上看到任何错误吗?我不太确定如何做。如果您使用的是firefox,您可以安装firebug来显示错误。您使用的是哪个浏览器?所有主流浏览器都内置了js控制台——如果您查看标准菜单(通常在“文件”或“工具”下),您将看到“开发人员工具”>“web控制台”。这将显示js抛出的任何错误(以及其他有用的东西)。正如@raminson指出的,firebug在ffI God and Get firebug中非常有用。在我看到第一个答案之前就抓住了它。不过我很感激,因为我完全忘记了。如果没人介意的话,还有一个问题阻碍着你。它在第一个答案下面的注释中。我认为这可能是错误的逻辑,但我没有看到。你在控制台上看到任何错误吗?我真的不知道怎么做。如果你使用的是firefox,你可以安装firebug来显示错误。你使用的是哪个浏览器?所有主流浏览器都内置了js控制台——如果您查看标准菜单(通常在“文件”或“工具”下),您将看到“开发人员工具”>“web控制台”。这将显示js抛出的任何错误(以及其他有用的东西)。正如@raminson指出的,firebug在ffI God and Get firebug中非常有用。在我看到第一个答案之前就抓住了它。不过我很感激,因为我完全忘记了。如果没人介意的话,还有一个问题阻碍着你。它在第一个答案下面的注释中。我认为这可能是错误的逻辑,但我没有看到。如果你检查你的控制台,你应该会得到类似“TypeError:object没有方法'attr'”(至少在chrome中是这样)的东西。我刚刚知道如何在firefox中。我不怎么用它。我还有一个问题没有解决。我将主页链接默认设置为不活动,因为页面在“主页”上加载。我需要将其更改回活动状态,并尝试使用
var-activePage=$('a[href$=“home”]);var activePageHref=activePage.attr('href');var setOld=$('a[href$=“'+activePageHref+'“]');setOld.attr('href',''+activePageHref+'')还更新了我的脚本以反映我现在的情况。@我更新了我的答案。看一看,让我知道这可能是你需要的。对此我深表歉意,但我已经做了一段时间的javascript,但我只是边学边用。我觉得这样问很愚蠢,但你能说得更详细一点吗?你是说同时更改第一块和第二块代码,然后在何处替换?我想我对addclass有一个想法,我会试试,但老实说,我不是