我看到在JavaScript中设置事件有两种主要方法:
直接在标签内添加事件,例如:
<a href="" onclick="doFoo()">执行foo函数</a>
通过JavaScript设置事件,例如:
<a id="bar" href="">执行bar函数</a>
你可以在部分的
我看到在JavaScript中设置事件有两种主要方法:
直接在标签内添加事件,例如:
<a href="" onclick="doFoo()">执行foo函数</a>
通过JavaScript设置事件,例如:
<a id="bar" href="">执行bar函数</a>
你可以在部分的
$$('#itemlist table th > a').invoke('observe', 'click', performSort);
Event.observe()
,在多个事件上执行相同或非常相似的操作时具有优势,因为当所有这些调用在同一个位置时,这变得很明显。此外,正如Konrad指出的那样,在某些情况下,可以通过单个调用来处理这些事件。你也可以使用 addEventListener(不支持 IE)/ attachEvent(IE 支持)。
请查看:http://www.quirksmode.org/js/events_advanced.html
它们允许您将一个或多个函数附加到现有 DOM 对象上的事件。它们还具有允许稍后取消附加的优点。
一般来说,如果您正在使用大量的 JavaScript,将您的 JavaScript 代码编写得易读性更强,而不是您的 HTML 代码,会非常有用。因此,您可以说在 HTML 中使用 onclick=X
很清晰,但这既是代码分离的缺失,又是代码之间的另一种语法依赖,并且需要同时阅读 HTML 和 JavaScript 才能理解页面的动态行为。
像YUI和jQuery这样的库提供了在DOM准备就绪后添加事件的方法,这可以在window.onload之前完成。它们还确保您可以添加多个事件处理程序,以便您可以使用来自不同来源的脚本而不会相互覆盖。
因此,您的实际选择是:
一、如果您的脚本很简单,并且将是页面上唯一运行的脚本,请创建一个init函数,如下所示:
window.onload = function () {
init();
}
function init() {
// actual function calls go here
doFoo();
}
二、如果您有许多脚本或计划从不同的来源混合使用脚本,请使用库及其onDOMReady
方法来安全地添加事件处理程序。
我个人偏好于在外部js文件中使用jQuery,这样js代码就完全与html分离。Javascript应该是不显眼的,因此内联(即第一个示例)在我看来并不是最佳选择。当查看html时,唯一表明您正在使用js的迹象应该是head中的script包含。
附加(和处理)事件的示例可能如下所示:
var myObject = {
allLinkElements: null,
init: function()
{
// Set all the elements we need
myObject.setElements();
// Set event handlers for elements
myObject.setEventHandlers();
},
clickedLink: function()
{
// Handle the click event
alert('you clicked a link');
},
setElements: function()
{
// Find all <a> tags on the page
myObject.allLinkElements = $('a');
// Find other elements...
},
setEventHandlers: function()
{
// Loop through each link
myObject.allLinkElements.each(function(id)
{
// Assign the handler for the click event
$(this).click(myObject.clickedLink);
});
// Assign handlers for other elements...
}
}
// Wait for the DOM to be ready before initialising
$(document).ready(myObject.init);
如果您想要保持所有js文件的组织方式,我认为这种方法是有用的,因为您可以为不同的任务使用特定的对象,而且一切都很好地封装在其中。
当然,让jQuery(或其他知名库)来完成复杂工作的巨大好处是跨浏览器支持(主要)已经处理好了,这使得生活变得更加轻松。