动态添加js事件
//表单对象
function GetObject(Name)
{
var inputlist=document.all.tags('input');
var i=0;
for(i=0;i<inputlist.length;i++)
{
var input=inputlist[i];
if(input.id.indexOf(Name) !=-1)
{
return input;
}
}
return null;
}
//设置对象事件
function setEvent(Object,EventName,EventFunction)
{
if(Object ==null)
return;
if(window.addEventListener)
{
//其它浏览器的事件代码: Mozilla, Netscape, Firefox
//添加的事件的顺序即执行顺序 //注意用 addEventListener 添加带on的事件,不用加on
Object.addEventListener(EventName.replace('on',''), EventFunction, false);
}
else
{
//IE 的事件代码 在原先事件上添加 add 方法
Object.attachEvent(EventName,EventFunction);
}
}
//失去焦点函数
function blur()
{
var size=lSize.value * 0.3;
pSize.value=ForDight(size,0);
}
//四舍五入函数
function ForDight(Dight,How)
{
var Dight = Math.round (Dight*Math.pow(10,How))/Math.pow(10,How);
return Dight;
}
//执行
var lSize=GetObject('STNumberTextBox1');
var pSize=GetObject('STNumberTextBox2');
setEvent(lSize,'onblur',blur);
attachEvent追加事件
object.event = handler;
的方式初始化。这种方式对于 Internet Explorer、Mozilla/Firefox 和 Opera 来说很通用。但是有一个问题就是,这种方式只能一个事件对应一个事件处理过程。如果希望一个事件可以依次执行多个处理过程就不好用了。
但是 Internet Explorer 从 5.0 开始提供了一个 attachEvent 方法,使用这个方法,就可以给一个事件指派多个处理过程了。attachEvent 对于目前的 Opera 也适用。但是问题是 Mozilla/Firefox 并不支持这个方法。但是它支持另一个 addEventListener 方法,这个方法跟 attachEvent 差不多,也是用来给一个事件指派多个处理过程的。但是它们指派的事件有些区别,在 attachEvent 方法中,事件是以 “on” 开头的,而在 addEventListener 中,事件没有开头的 “on”,另外 addEventListener 还有第三个参数,一般这个参数指定为 false 就可以了。
因此要想在你的程序中给一个事件指派多个处理过程的话,只要首先判断一下浏览器,然后根据不同的浏览器,选择使用 attachEvent 还是 addEventListener 就可以了。实例如下:
if (window.attachEvent) {
window.attachEvent("onload", remove);
} else if (window.addEventListener) {
window.addEventListener("load", remove, false);
}
function remove() {
var div = document.getElementById("divprogressbar");
document.body.removeChild(div);
}
注意:attachEvent 所指派的多个过程的执行顺序是随机的,所以这几个过程之间不要有顺序依赖。另外 attachEvent 和 addEventListener 不仅仅适用于 window 对象,其他的一些对象也支持该方法。
带参数设置:
window.attachEvent('onload', function(){changeHeight('参数');});