为什么Stackoverflow使用javascript动态绑定用户操作?

为什么Stackoverflow使用javascript动态绑定用户操作?,javascript,jquery,Javascript,Jquery,检查我看到的问题的HTML源代码,例如: <a id="comments-link-xxxxx" class="comments-link">add comment</a><noscript>&nbsp;JavaScript is needed to access comments.</noscript> 似乎所有用户单击事件都是以这种方式绑定的 这种方法的缺点对于不使用javascript浏览网站的人来说是显而易见的,但是,与直接声明事

检查我看到的问题的HTML源代码,例如:

<a id="comments-link-xxxxx" class="comments-link">add comment</a><noscript>&nbsp;JavaScript is needed to access comments.</noscript>
似乎所有用户单击事件都是以这种方式绑定的


这种方法的缺点对于不使用javascript浏览网站的人来说是显而易见的,但是,与直接声明事件相比,使用javascript动态添加事件有什么好处?

我看到的唯一好处是减少了页面大小,从而降低了所需的带宽

编辑:由于我被否决了,让大都会对我的答案进行更多的解释

我的观点是,使用链接作为空锚点只是一种不好的做法,没有别的!当然,将JavaScript逻辑与HTML分离是非常好的。当然,重构和调试更容易。但在这里,它违背了不引人注目的JavaScript的主要原则:优雅降级

一个好的解决方案是必须调用可能的注释:一个是通过一个真正的链接指向一个显示注释的简单页面,另一个是只返回注释(JSON表示法或类似格式),目的是通过AJAX调用,直接注入到主页面中


这样,使用AJAX方法的方法还应该考虑取消另一个调用,以避免用户被重定向到简单页面。这将是不引人注目的JavaScript。在这里,它只是将JavaScript放在一个被误用的锚标记上。

这样,您就可以拥有一个轻量级页面,您可以通过JavaScript处理所有操作。不必使用嵌入到页面中的不同URL和操作,只需编写一个javascript函数来查找链接,并将其挂起,无论您在页面上的何处转储该“注释”链接。 这将节省大量重复的html:)

  • 您不必在HTML中反复键入相同的字符串(如果没有其他内容会增加要调试的打字错误的数量)
  • 您可以将HTML/CSS交给不需要任何javascript技能的设计师
  • 您可以通过编程控制调用什么以及何时调用回调
  • 它更优雅,因为它符合布局和行为之间的概念分离
  • 修改和重构更容易

在最后一点上,想象一下如果您想在模板中的其他地方添加一个“ShowComments”图标。将相同的回调绑定到图标将非常容易。

通过事件API而不是在标记中附加事件是低调javascript的核心。欢迎您阅读完整的概述,了解为什么不引人注目的javascripting很重要


与将样式与标记分离的方式相同,您希望将脚本与标记(包括事件)分离。

我认为这是良好软件开发的基本原则之一:

表示和逻辑的分离


HTML/CSS本质上是一种表示语言。Javascript用于创建逻辑。如果可能的话,将任何逻辑从演示文稿中分离出来是一种很好的做法。

我想说,它更像是一种非结构化JavaScript的启用程序。唉,堆栈溢出忽略了不引人注目的JavaScript的真正核心,即创建适合所有人的网站,不管他们是否有可用或启用的JavaScript。从技术上讲,你是正确的,但我相信迎合JavaScript禁用用户的日子即将结束。就像支持IE6一样,这是另一个阻碍网络发展的遗留问题。不知道为什么你会被否决——没有最终用户会从中受益,正如你所提到的,没有JavaScript链接是完全无用的。
// Setup our click events..
$().ready(function() {    
        $("a[id^='comments-link-']").click(function() { comments.show($(this).attr("id").substr("comments-link-".length)); });    
});