“ javascript:void(0);” vs“返回假” vs“ preventDefault()”

迈克:

当我希望某个链接不执行任何操作而仅响应javascript操作时,避免链接滚动到页面顶部的最佳方法是什么?
我知道几种方法,它们似乎都可以正常工作:

<a href="javascript:void(0)">Hello</a>

要么

<a id="hello" href="#">Hello</a>
<script type="text/javascript>
  $(document).ready(function() {
    $("#toto").click(function(){
      //...
      return false;
    });
  });
</script>

乃至 :

<a id="hello" href="#">Hello</a>
<script type="text/javascript>
  $(document).ready(function() {
    $("#toto").click(function(event){
      event.preventDefault();          
      //...
    });
  });
</script>

你有什么喜好吗?为什么呢?在什么条件下?

PS:当然,以上示例假定您使用的是jquery,但是mootools或prototype的等效项是。

Bobince:

捆绑:

  • javascript: URL总是令人恐惧。
  • 内联事件处理程序属性也不是很好,但是可以进行一些快速的开发/测试。
  • 从脚本进行绑定,使标记保持干净,通常被认为是最佳做法。jQuery鼓励这样做,但是没有理由您不能在任何库或纯JS中做到这一点。

回应:

  • 在jQuery中,return false表示preventDefaultstopPropagation,因此,如果您关心父元素接收事件通知,则含义不同。
  • jQuery将其隐藏在此处,但preventDefault/ stopPropagation通常必须在IE中(returnValue/ cancelBubble拼写不同

然而:

  • 您有一个不是链接的链接。它没有链接到任何地方。这是一个动作。<a>并不是真正的理想标记。如果有人尝试单击鼠标中键,或将其添加到书签,或链接具有的其他任何功能,它都会出错。
  • 对于确实指向某物的情况,例如当它打开/关闭页面上的另一个元素时,请将链接设置为指向#thatelementsid并使用不引人注目的脚本从链接名称中获取元素ID。您还可以嗅探location.hash文档上的加载以打开该元素,因此该链接在其他上下文中变得很有用。
  • 否则,对于纯粹是动作的操作,最好将其标记为:<input type="button"><button type="button">您可以使用CSS设置样式,使其看起来像链接而不是按钮(如果需要)。
  • 但是,按钮样式的某些方面在IE和Firefox中无法完全消除。它通常并不重要,但是如果您确实需要绝对的视觉控制,则可以选择使用a作为折衷方案<span>您可以添加一个tabindex属性,以使其在大多数浏览器中都可以通过键盘访问,尽管这实际上并没有得到适当的标准化。您还可以在其上检测到诸如空格或Enter之类的按键来激活。这虽然不尽如人意,但仍然很受欢迎(例如,SO就是这样)。
  • 另一种可能性是<input type="image">这具有具有完全视觉控制的按钮的可访问性优点,但仅适用于纯图像按钮。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章