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