防止锚标签导航到主页

时间:2013-08-09 11:45:31

标签: durandal

我有一个常规的锚标签,其href属性设置为“#”。通常情况下,这会阻止任何导航,但在durandal中它会导航到主视图。如何阻止它导航到该视图? 我无法改变html和样式。它需要是锚标记。但是我可以将click事件绑定到它。有没有办法取消锚定点击事件中的导航?

问候

2 个答案:

答案 0 :(得分:3)

将click事件绑定到它并调用event.preventDefault()

<a href="#" id="someAnchor">Example</a>

$(function() {
   $('#someAnchor').click(function(event) { event.preventDefault(); });
});

这将阻止浏览器传播click事件,不会发生任何事情。但是在click事件中你可以做任何你想要的逻辑。

如果你使用敲除来绑定点击事件,那么请refer to this stackoverflow post关于如何从敲除绑定中做到这一点。

编辑** Per Tyrsius'评论使用敲除绑定绑定点击事件是一种更好的做法。

所以,建议您这样做:

<a href="#" data-bind="click: clickHandler">ClickMe</a>

clickhandler = function (e) {
  e.cancelBubble = true;
  if (e.stopPropagation) e.stopPropagation();
};

答案 1 :(得分:0)

让所有锚链接都以前缀开头。然后在router.guardRoute函数中输入:

if (_.startsWith(instruction.fragment, YOUR_PREFIX))
      return false;
}

对我来说效果很好,无需在应用视图中添加任何其他内容。

PS。 _.startsWith是lodash函数。如果没有使用lodash做JS字符串indexOf或其他什么