javascript:协议很糟糕,但最容易获得的替代方案是什么?

时间:2014-03-27 00:52:28

标签: javascript events accessibility

所以我认为使用href="javascript:fn_name();"是不好的做法是非常一致的。但是,假设我有一个链接:<a href="#" class="exec-fn">Click me</a>

我可以用

$('.exec-fn').click(fn_name);

但这不太容易接近。由于这是一个点击事件,这不适用于点击或可能标记链接并按Enter键跟随它。我有点想模仿浏览器关注和跟踪链接的能力,因为它的默认行为允许它,但我知道不推荐使用javascript:协议,而且我也不总是想要一个全局可访问的名称功能要么。

有更好的方法吗?

2 个答案:

答案 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

我在手机上,只有几分钟的停机时间。否则,我会提供链接和更多详细信息。遗憾。