Javascript JQuery—将GUI对象连接到事件的最佳方式?

Javascript JQuery—将GUI对象连接到事件的最佳方式?,javascript,jquery,html,Javascript,Jquery,Html,自从几年前JQuery问世以来,我一直在所有客户端脚本中使用它。最初,我使用“$()语法来抓取和操作对象。对我来说,这是“旧skool”范例,它将向上按钮事件显式连接到函数: <button onClick='myFunction(this);' ... /> 我的一些同事更喜欢通过JQuery将脚本附加到事件: $(document).ready( $("#myButton").click( function(event){ al

自从几年前JQuery问世以来,我一直在所有客户端脚本中使用它。最初,我使用“$()语法来抓取和操作对象。对我来说,这是“旧skool”范例,它将向上按钮事件显式连接到函数:

<button onClick='myFunction(this);' ...  />
我的一些同事更喜欢通过JQuery将脚本附加到事件:

$(document).ready(
    $("#myButton").click(
        function(event){
            alert('this is the newer JQuery way of doing things');
        }
    );
);

起初,我发现过于夸张的JQuery语法依赖于匿名函数等,很难阅读,但我的眼睛和大脑已经适应了,所以我现在对这两种方法都很满意。不过,我希望我们的代码库保持一致。有人对哪种方法“更好”有什么看法吗

jQuery方式加强了内容和功能之间的分离,这在我看来是一件好事。它减少了内容/标记中的“噪音”。它还使程序员能够专注于脚本编写,而“marker-upper”则专注于HTML

顺便说一句,如果您不想:

function myFunction(obj){
    alert('this is a compromise!')
}

$(function() {
    $("#myButton").click(myFunction);
});

您拥有的jQuery版本也可以小得多:

$(function() {
  $("#myButton").click(function(){
    alert('this is the newer JQuery way of doing things');
  });
});
我会使用这个或任何其他不引人注目的方法(不是内联处理程序),总体上问题比较少,维护也会容易得多。记住,使用此路由,页面中不能有JavaScript,它可以由客户端加载并缓存一次,这也意味着页面加载速度更快


还有很多事情是不能内联(或跨浏览器)正确完成的,例如非常有用的和(因此在输入子对象时不会触发)事件仅在IE中内联可用。

我认为第二种方法更简洁,原因有几个:

  • 它确实允许您将内容和行为分开,也就是说,您可以先定义内容的结构,然后再考虑具体的行为。。。如果您的团队涉及不同的技术配置文件(有人负责原始HTML,有人是Javascript专家……),这一点尤其有用

  • 这确实有助于维护,如您所知,如果出现问题,可以在哪里查找可能存在错误的javascript,而不必查看整个HTML

  • 当您的HTML实际上是动态的(在服务器端,即PHP或ASP.NET上生成)时,在您生成的HTML中包含这些客户端元素实际上是非常痛苦的。。。这是一个非常常见的错误源,因此最好不要使用javascript


    • jQuery版本更好,因为它将行为(JavaScript)与结构(HTML)分离

      如果括号太多,可以使用编译成JavaScript的语言,如CoffeeScript(http://jashkenas.github.com/coffee-script/):


      “你能有太多的jQuery吗?”-不哈哈,
      你能有太多的JQuery吗?
      这是什么类型的标题:)你能澄清一下上面的代码片段在做什么吗?我还没有看到$(函数)()。。。@5arx之前的语法-它是
      $(document).ready(function(){
      $(function() {
        $("#myButton").click(function(){
          alert('this is the newer JQuery way of doing things');
        });
      });
      
      $ ->
        $("#myButton").click ->
          alert 'this is the newer JQuery way of doing things'