2011-09-21 67 views
1

可能重复:
JavaScript Event Listeners vs Event Handlers
element.onload vs element.addEventListener(“load”,callbak,false)事件侦听器与事件处理程序

我读过this question,但目前还不清楚什么是

<input type="button" onclick="call_function();" /> 
之间的区别

$(function() { 
    $("#my_button").click(function() { 
     call_function(); 
    }); 
}); 
<input type="button" id="my_button" /> 

第一个是事件处理程序,第二个是事件侦听器,对吗?

一种比另一种更好,为什么?哪一个更好地处理优雅的退化?

+0

这里看看我的回答是:http://stackoverflow.com/questions/6902033/element-onload-vs-element-addeventlistenerload-callbak-false/6902073#6902073 –

+0

同样的问题,因为这:HTTP://计算器。 com/questions/2215379/javascript-event-listeners-vs-event-handlinglers – adamjmarkham

+0

@adamjmarkham我想我明确表示我已经阅读过这个问题。 – Aillyn

回答

3

从功能上讲没有区别。在两种情况下,当单击给定的button元素时,将调用方法call_function

风格虽然有很大的区别。后者的例子是考虑了许多更强大的,因为它允许开发人员在HTML页面中分离出3份到完全不同的项目

  • HTML页面:包含页面
  • CSS样式表的数据:确定数据如何被显示
  • 的Javascript:提供行为

这是可能在第二示例中,因为JavaScript的行为是挂接独立于按钮的定义。这允许HTML完全独立于相关的javascript定义。他们可以在不同的文件中,由不同的人编写,并且大部分是独立变异的。有一些限制(如不要更改id字段),但总体而言,它在逻辑上不同的显示部分之间提供了很大程度的自由度。

+0

因此,关注问题比其他问题更分离?我知道这对最终用户来说不会有什么不同,但它是否会让程序员更轻松? – Aillyn

+0

@pessimopoppotamus是差的显著部分 – JaredPar

+1

,如果你要改变所上的click事件提出的函数的名称,你将不得不回到HTML代码,改变的onclick =“”值 –

1

事件处理函数是浏览器为响应特定事件而调用的函数或其他代码块。

在给定的上下文中,事件监听器是由javascript库(此处为jquery)引入的更高级别的抽象,并且此库将为您创建的事件处理函数会创建一些事件处理函数,它将调用一些代码,逐个。所以jquery隐藏了你维护一个监听器函数列表并调用它们的逻辑。