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

时间:2020-03-06 14:50:31  来源:igfitidea点击:

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

<a id="comments-link-xxxxx" class="comments-link">add comment</a><noscript> JavaScript is needed to access comments.</noscript>

然后在javascript来源中:

// Setup our click events..
$().ready(function() {    
        $("a[id^='comments-link-']").click(function() { comments.show($(this).attr("id").substr("comments-link-".length)); });    
});

似乎所有用户单击事件都是通过这种方式绑定的。

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

解决方案

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

编辑:由于我被否决,让我见更多解释我的答案。

我的观点是,将链接用作空锚只是一个坏习惯,没有别的!当然,JavaScript逻辑与HTML的分离非常好。当然,重构和调试更容易。但是在这里,这与不干扰JavaScript的主要原则背道而驰:Gracefull降级!

一个好的解决方案是必须调用这些注释:一个通过REAL链接指向一个显示该注释的简单页面,另一个通过仅返回注释(以JSON表示法或者类似格式)的目的为:通过AJAX调用直接注入到主页中。

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

这样,我们可以创建一个轻量级的页面,我们可以在其中通过javascript处理所有操作。不必编写加载到页面中的不同URL和动作的负载,只需编写一个JavaScript函数即可找到该链接并将其挂钩,无论我们在页面上的哪个位置转储"评论"链接。
这样可以节省重复html的工作量:)

  • 我们不必在HTML中一遍又一遍地键入相同的字符串(如果没有其他操作,这将增加要调试的错别字的数量)
  • 我们可以将HTML / CSS交给不需要任何JavaScript技能的设计师
  • 我们可以通过编程方式控制调用什么回调以及何时调用
  • 它更优雅,因为它适合布局和行为之间的概念分离
  • 修改和重构更容易

最后一点,想象一下是否要在模板中的其他位置添加"显示评论"图标。将相同的回调绑定到图标非常容易。

通过事件API而不是在标记中添加事件是不引人注意的javascript的核心。欢迎我们阅读此Wikipedia文章,以全面了解为何简洁的JavaScript如此重要。

要将样式与标记分开的方法与要将脚本与标记分开(包括事件)的方法相同。

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

表示和逻辑的分离。

HTML / CSS本质上是一种表示语言。 Javascript是用于创建逻辑的。如果可能的话,最好将逻辑与演示文稿分开。