涉及 e.preventDefault 的 if/else 语句

Posted

技术标签:

【中文标题】涉及 e.preventDefault 的 if/else 语句【英文标题】:if/else statement involving e.preventDefault 【发布时间】:2015-01-07 06:44:41 【问题描述】:

这可能是一个非常基本的问题,但我无法为我的导航栏提出 if/else 语句。我有外部页面链接和特定 ID 的组合,我想在导航栏中单击时滚动到该 ID。下面是我正在处理的代码的 sn-p,由于 e.preventDefault,我无法访问外部链接。基本上我想阻止默认的内部链接ID(而是向下滚动到该ID),并在菜单选项是外部链接时正常执行。我能得到一些帮助吗?

// if not an external link, scroll to specific ID when click on menu item
$('.webby-top-menu .navbar-nav a').click(function (e) 
    e.preventDefault();
    var linkId = $(this).attr('href');
    scrollTo(linkId);

    if ($('.navbar-toggle').is(":visible") == true) 
        $('.navbar-collapse').collapse('toggle');
    

    $(this).blur();
    return false;
);

// stick navbar on top
$('.webby-top-menu ').stickUp();

谢谢!

【问题讨论】:

为什么不给指向外部页面的链接和指向特定 ID 的链接一个不同的类名,以便为它们添加不同的事件侦听器?那么事件处理程序中只有 e.preventDefault() 用于不指向外部页面的链接? 我没有在该代码中看到您尝试执行您描述的操作。你努力了吗? Test if links are external with jQuery / javascript? 的可能重复项(许多可能之一。) 过滤外部/内部链接似乎是 OP 的普遍问题。 @Mathletics,我没有看到关于该问题的相关解决方案。你是否?这不是内部与外部的问题,而是锚与超链接的问题。 【参考方案1】:

似乎在链接的href 属性的第一个字符处检查井号就可以了:

$('.webby-top-menu .navbar-nav a').click(function (e) 
    var link = $(this).attr('href').charAt(0);

    if (link === '#') 
        e.preventDefault();
        alert('Anchor!');
    
);

Fiddle

【讨论】:

以上是关于涉及 e.preventDefault 的 if/else 语句的主要内容,如果未能解决你的问题,请参考以下文章

阻止事件冒泡和默认行为,禁止键盘事件

jquery——移动端touch事件

阻止浏览器的默认弹窗行为

jquery 阻止默认行为

jQuery中的事件

阻止引导选项卡的显示事件