2010-10-29 118 views
1

我想知道是否有一种方法来禁用当前类使用jQuery重新加载页面?停止当前页面重新加载时

例如,当您处于“关于”页面时,“关于”页面的当前状态不允许用户在重新点击链接时重新加载页面。所以,如果你有某种动画,它不会重新开始。

如果有人可以借我一把手,我将不胜感激。

谢谢

这是我到目前为止有:

$(function() { 
    $page = jQuery.url.attr("file"); 
    if (!$page) { 
     $page = 'index.html'; 
    } 
    $('ul.navigation li a').each(function() { 
     var $href = $(this).attr('href'); 
     if (($href == $page) || ($href == '')) { 
      $(this).addClass('current'); 
     } else { 
      $(this).removeClass('current'); 
     } 
    }); 
}); 
+0

请在提问时将代码放入代码块中。 – 2010-10-29 15:49:15

+0

您当然可以阻止链接可用,但是您无法阻止用户刷新页面或重新输入URL以重新加载页面。你可能想要考虑你想要完成的事情。 – Ender 2010-10-29 15:52:12

回答

0

你必须抓住click事件,并取消它。见我下面我的意见之间增加的部分:

$(function(){ 
$page = jQuery.url.attr("file"); 
if(!$page) { 
    $page = 'index.html'; 
} 
$('ul.navigation li a').each(function(){ 
    var $href = $(this).attr('href'); 
    if (($href == $page) || ($href == '')) { 
    $(this).addClass('current'); 

    /** ADDED BELOW **/ 
    $(this).click(function(event) { 
    event.preventDefault(); 
    event.stopPropagation(); 
    }); 
    /** ADDED ABOVE **/ 

    } else { 
    $(this).removeClass('current'); 
    } 
}); 
}); 
+0

请注意,“event.preventDefault()”会停止重新加载页面的点击,而“event.stopPropagation()”会阻止该事件冒泡到其他事件处理程序。 – 2010-10-29 15:52:39

+0

另外,作为一般的良好实践,除非有充分的理由(例如,如果指定的变量是jQuery扩展对象),否则您可能不应将变量命名为美元符号。上面命名为“$ page”和“$ href”的纯字符串可能更好地称为“page”和“href”。 – 2010-10-29 15:53:49

+0

再次感谢您的帮助,下次我有一个问题,我会确保将代码放入代码块并命名我的变量。 – Kmack 2010-10-29 16:00:01

0

你可以通过更换禁用链接$(本).addClass(“当前”)与:

$(this).addClass('current').find("a").click(function() { 
    return false;      
}) 

这为我工作过去但刚刚看到本的更新,并有兴趣,如果我的和他的答案都将工作,或者我的是否有缺陷?是event.preventDefault(); 和event.stopPropagation()更好的选择?

+0

作为一种风格问题,人们倾向于选择preventDefault而不是返回false。由于陈旧的原因返回虚假作品,但这实际上是一种黑客行为。看到这个SO帖子的讨论:http://stackoverflow.com/questions/1357118/javascript-event-preventdefault-vs-return-false – 2010-10-29 16:08:51

0

如何动态地为当前页面的链接添加散列?在网址中点击带有散列的链接不会重新加载页面。 (DOM元素具有一个名为“hash”的属性,可以用于此)。

相关问题