我是一个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;
我需要添加指向此单页网站的普通链接,而不会弄乱此代码(它启用视差滚动)。有什么方法可以逐个链接完成此操作吗?
顺便说一句,我在这里看到了解决方案,但我必须承认不太理解它们。谢谢。
不知道为什么有人会以这种方式全面禁用页面上的所有链接。不幸的是,您继承了此类代码。我不确定你的意思是你不能碰那个代码,还是只是不想碰。
如果是前者,您有两种选择:
1) 为某些链接取消绑定此点击事件。例如,如果您在容器内有链接,#container
,或者所有链接都有某个类,.class
,您可以这样做:
$('#container a').off('click');
$('a.class').off('click');
然后,这些链接将没有继承的单击事件处理程序。
唯一的问题是取消绑定到此类链接的所有单击事件处理程序的绑定。由于继承的事件没有命名空间,因此这是不可避免的。第二种选择是...
2) 设置第二个单击事件处理程序,通过将用户转发到链接的 HREF 来绕过继承处理程序的默认操作阻止:
$('a').on('click', function() { location.href = $(this).attr('href'); });
如何给这些特殊链接一个data-donthandle="true"
属性。然后,在 jQuery 中检查此属性。如果该属性存在且为 false,则只需在事件处理程序的开头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;
}
});