由于 HTML 将事件看成对象的属性,可以通过给该属性赋值的方式来改变事件的处理器,这给使用JavaScript 脚本来设置事件处理器带来了很大的灵活性。
考察如下的实例:[code]<! DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0//EN”
“http://www.w3.org/TR/REC-html140/strict.dtd”>
[/code]程序运行后,单击“测试按钮 : 触发事件处理器A”按钮,弹出警告框如图所示。
在上述警告框中单击“确定”按钮后,返回原始页面,更改按钮的value 属性为“测试按钮 : 触发事件处理器B”。
继续单击该按钮后,弹出警告框如图所示。
在上述警告框中单击“确定”按钮后,返回原始页面,更改按钮的value 属性为“测试按钮 : 触发事件处理器B”,继续操作可以发现过程循环。
由程序结果可见,主要过程分为4 步:
(1)文档载入后,通过属性赋值的方式将按钮的Click 事件默认的事件处理器设置为MyHandlerA:
document.all.MyForm.MyButton.onclick=MyHandlerA;
(2)单击按钮后,触发Click 事件当前的事件处理器MyhandlerA,后者返回提示信息并将按钮的value 属性更改,同时将其Click 事件当前的事件处理器设置为MyhandlerB:document.all.MyForm.MyButton.value="测试按钮 : 触发事件处理器A";
document.all.MyForm.MyButton.onclick=MyHandlerA;
(3)在提示页面单击“确定”按钮返回原始页面后,再次单击按钮,触发Click 事件当前的事件处理器MyhandlerB,后者返回提示信息并将按钮的value 属性更改,同时将其
Click 事件当前的事件处理器设置为MyhandlerA:document.all.MyForm.MyButton.value="测试按钮 : 触发事件处理器B";
document.all.MyForm.MyButton.onclick=MyHandlerB;
(4)在提示页面单击“确定”按钮返回原始页面后,返回步骤(2)。
在 JavaScript 脚本中根据复杂的客户端环境及时更改事件的处理器,可大大提高了页面的交互能力。
值得注意的是,给对象的事件属性赋值为事件处理函数时,后者要省略函数后面的括号,且对象和函数要在显式赋值语句之前定义。