0

我是一个 html css 设计类型,对 jquery 不太满意。我继承了一个禁用链接默认行为的站点,我可以看到以下代码:

$('a').click(function(event) {
    event.preventDefault();

    var locationHref = window.location.href;
    var elementClick = $(this).attr("href");
    var destination = $(elementClick).offset().top;

    $("html:not(:animated),body:not(:animated)").animate({ scrollTop: destination}, 1000, function() {
        window.location.hash = elementClick
    });
      return false;

我需要在不弄乱此代码的情况下向这个单页网站添加普通链接(它启用视差滚动)。有什么办法可以通过链接来完成这个链接吗?

顺便说一句,我在这里看到了解决方案,但我必须承认我不太了解它们。谢谢。

4

2 回答 2

0

data-donthandle="true"给这些特殊链接一个属性怎么样。然后,在 jQuery 中检查该属性。如果该属性存在并且为假,则只需return true;在事件处理程序的开头。

正如已经建议的那样,这将节省您通过 javascript 浏览和禁用 onclick 的时间。

$('a').click(function(event) {
    if($(this).attr('data-donthandle')) {
        return true;
    }
    else {
       event.preventDefault();
       //code here for handling clicks
       alert('Stopped.');

       return false;
    }
    });​
于 2012-08-07T11:31:17.223 回答
0

不知道为什么有人会以这种方式全面禁用页面上的所有链接。不幸的是你继承了这样的代码。我不确定你的意思是你不能触碰那个代码,还是只是不想触碰。

如果是前者,您有两种选择:

1) 为某些链接解绑此点击事件。例如,如果您在容器内有链接#container,或者您的所有链接都有特定的类.class,您可以这样做:

$('#container a').off('click');
$('a.class').off('click');

然后,这些链接将不受继承的 click 事件处理程序的影响。

唯一的问题是您取消绑定到此类链接的所有单击事件处理程序。由于继承的事件没有命名空间,这是不可避免的。第二种选择是...

2)设置第二个点击事件处理程序,通过将用户转发到链接的 HREF 来绕过继承处理程序的默认操作预防:

$('a').on('click', function() { location.href = $(this).attr('href'); });
于 2012-08-07T11:29:30.227 回答