2012-07-24 34 views
0

绑定事件使用JQuery的bind()认为比简单地做onclick ='bla(this)'更好,为什么?Javascript:使用jquery的bind()比使用onclick ='bla()'更好的为什么?

谢谢!

+0

保持JavaScript代码进行标记确实是一个不错的主意。 – Pointy 2012-07-24 21:52:34

+0

如果javascript对于页面有意义是必要的,该怎么办?你会在脚本标签中嵌入必要的部分,然后从onclick钩住的内联脚本中调用“可选”库吗? – Mithon 2012-07-24 21:54:48

+0

HTML是关于**内容**,而不是行为。如果某些HTML元素的行为应该明显反映含义,那么他们应该有类似“动画”或“信息”等的类。 (也就是说,我不是一个形式主义者或狂热分子或其他任何人;事实上我非常务实:-) – Pointy 2012-07-24 22:00:08

回答

5

因为Unobtrusive JavaScript (UJS)是新的常态。

对于我来说,标记的行为,从分离是最大的好处,但也有其他的东西,很方便吧,每个人都喜欢不同的方面。

@Esailija正确地指出,jQuery让UJS 容易,在工作中,浏览器兼容性,浏览器的解决方法的层面来讲,等等。 UJS不依赖依赖于jQuery上的,但JS库已经在更广泛的功能范围内实现了可行性。

+0

它虽然更短:) – Tom 2012-07-24 21:48:45

+0

嗯,我正要写一个关于jQuery事件模型(标准化,bug修复,委托,shimmed事件,如mouseenter和mouseleave等等)的好处的回答,然后看到这个获取勾选。 fuu – Esailija 2012-07-24 22:06:41

+0

@Esailija没有理由不添加它,虽然它没有内在联系 - 但jQuery让UJS变得非常容易。我会添加一个注释到答案为雅';) – 2012-07-24 22:08:59

0

使用jQuery事件,您可以获得6年的错误修复,事件对象规范化,命名空间,对事件的支持,如mouseenter,mouseleave,focusin和focusout,这些事件原本是专有的IE事件和事件委托。

附带任何种类的JS(不只是jQuery的)事件,您将获得:

  • 有用的对象上下文
  • 有用的功能范围
  • 能够连接多个处理程序相同的事件在同一元素

而如果你要动态生成HTML:

  • 理智,你不必连接字符串来生成代码,你只写事件处理程序代码就像任何其他代码,而不必担心你的字符串是如何先被解释为一个JavaScript字符串结束,然后通过HTML,然后作为JavaScript代码(是的,三个阶段。我甚至没有得到第一次修订如下右图):

    var html = '<div onclick="alert(\''+someVar+'\'+\'hello\');"></div>' 
    

    是不太容易写。比较

    $("<div>", { 
         click: function() { 
          alert(someVar + "hello"); 
         } 
        }); 
    
0

在我的经验是有代价的,应反对使用他们的利益进行加权抽象。

在jQuery中的情况下,我发现,当时它为我节省了远远超过任何缺点。举个例子,你将如何在标准的javascript中编写下面的例子。

$("ul").on("click", "li", function(){ }); 

这个jQuery method附加的事件处理程序的所有现在和将来的li元素。

实现这个功能并不是一个简单的任务,并通过使用jQuery您使用的是高质量的代码库,试图抽象浏览器的差异,并帮助你专注于编程。