所以我认为使用href="javascript:fn_name();"
是不好的做法是非常一致的。但是,假设我有一个链接:<a href="#" class="exec-fn">Click me</a>
。
我可以用
$('.exec-fn').click(fn_name);
但这不太容易接近。由于这是一个点击事件,这不适用于点击或可能标记链接并按Enter键跟随它。我有点想模仿浏览器关注和跟踪链接的能力,因为它的默认行为允许它,但我知道不推荐使用javascript:
协议,而且我也不总是想要一个全局可访问的名称功能要么。
有更好的方法吗?
答案 0 :(得分:6)
有相应的建议:
http://www.w3.org/TR/DOM-Level-3-Events/#click-synthesis
如果激活触发器的实例不是事件事件 键入click(即,它不是由用户的激活产生的 使用鼠标或等效指点设备的按钮或链接) 实现必须合成和分派事件类型的事件 单击作为该激活触发器的默认操作之一。该 Event.target的值必须设置为事件目标(通常, 当前关注的元素),事件必须模拟左边 单击(即,MouseEvent.button属性值必须为0,并且 MouseEvent.buttons属性值必须为1)。其他背景 这种模拟点击事件的信息是实现 依赖,但出于历史目的,单击的界面 event必须是MouseEvent接口,无论实际如何 用于激活元素的设备。防止默认操作 激活触发器,例如使用Event.preventDefault(),MUST 停止启动激活行为。
一个例子:
当用户使用键盘激活超链接时,例如通过聚焦超链接元素并按下“输入”键盘。或者&#39; &#39; key,click事件将被调度为相应keydown事件的默认操作。
基本上,点击事件是一种可行的方式。
答案 1 :(得分:0)
像Ben Alman的JQuery BBQ这样的项目提供了一种很容易的方式来监听哈希变化。您可以将链接保留为<a href="#go-there">Do things</a>
。 JQ BBQ可以拿起来做事并去处。
像Backbone这样的框架内置于Router。你可以为#/ go-there创建一个路由器并且有一些事情发生。
如果您更喜欢vanilla-js类型的dev,请使用window.onhashchange事件https://developer.mozilla.org/en-US/docs/Web/API/window.onhashchange
我在手机上,只有几分钟的停机时间。否则,我会提供链接和更多详细信息。遗憾。