有时候当某一对象的某一事件被触发时,它所要执行的程序可能是一大串,有可能是要呼叫某一函数,也有可能同时又要呼叫另一函数。document.getElementById("btn").onclick = method1;
document.getElementById("btn").onclick = method2;
document.getElementById("btn").onclick = method3;
如果这样写,那么将会只有medhot3被执行在IE中使用addachEvent ,var btn1Obj = document.getElementById("btn1");
//object.attachEvent(event,function);
btn1Obj.attachEvent("onclick",method1);
btn1Obj.attachEvent("onclick",method2);
btn1Obj.attachEvent("onclick",method3);
执行顺序为method3->method2->method1Mozilla系列中需要使用 addEventListenervar btn1Obj = document.getElementById("btn1");
//element.addEventListener(type,listener,useCapture);
btn1Obj.addEventListener("click",method1,false);
btn1Obj.addEventListener("click",method2,false);
btn1Obj.addEventListener("click",method3,false);
执行顺序为method1->method2->method3以上mehtod1,method2,method3都是函数名称,可以对无参数函数进行绑定,但是无法使用带参数函数.
document.getElementById("btn").onclick = method2;
document.getElementById("btn").onclick = method3;
如果这样写,那么将会只有medhot3被执行在IE中使用addachEvent ,var btn1Obj = document.getElementById("btn1");
//object.attachEvent(event,function);
btn1Obj.attachEvent("onclick",method1);
btn1Obj.attachEvent("onclick",method2);
btn1Obj.attachEvent("onclick",method3);
执行顺序为method3->method2->method1Mozilla系列中需要使用 addEventListenervar btn1Obj = document.getElementById("btn1");
//element.addEventListener(type,listener,useCapture);
btn1Obj.addEventListener("click",method1,false);
btn1Obj.addEventListener("click",method2,false);
btn1Obj.addEventListener("click",method3,false);
执行顺序为method1->method2->method3以上mehtod1,method2,method3都是函数名称,可以对无参数函数进行绑定,但是无法使用带参数函数.
//在事件处理
function createHandler(param1, param2)
{
return function Add()
{
return param1 + param2;
}
}<input type="button" onclick="createHandler(1, 2)" />
<script>
function testFun(event,obj,str)
{
event=event||window.event
alert(event);
alert(obj.onclick);
alert(str);
}
</script>
<input type=button value="click" id="2">
<script>
function abc(a)
{
alert(a);
}
document.getElementById("2").onclick=abc("hello!");
</script>
以上给button的onclick事件绑定了一个事件处理程序,但是这样做只能绑定一个函数,我现在想绑定多个函数,因此想利用attachEvent和addEventListener对事件进行多次绑定.通用函数:
function addEvent(elm, evType, fn, useCapture){
if (elm.addEventListener){
elm.addEventListener(evType, fn, useCapture);
return true;
} else if (elm.attachEvent){
var r = elm.attachEvent("on"+evType, fn);
return r;
} else {
alert("Handler could not be removed");
}
}
其中elm是绑定对象,evType是事件类型,如click,focus;fn是要绑定的函数,useCapture是否使用捕获模式.
我可以这样写
<input type=button value="click" id="2">
<script>
function abc(a)
{
alert(a);
}
var obj=document.getElementById("2");
addEvent(obj, "click", abc, false)
</script>
这样虽然可以绑定多个事件,但却不能传递参数了.
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>新建网页 1</title>
</head><body>
<a href="#" id="mylink">这是连接</a>
<script type="text/javascript">
function AttachEvent(type, target, handler, owner)
{
var eventHandler = handler;
if(owner)
{
// 在这里重新定义一个处理函数
eventHander = function(e)
{
handler.call(owner, e);
} }
if(window.document.all)
target.attachEvent("on" + type, eventHander );
else
target.addEventListener(type, eventHander, false);
}function MyLink_Click(e)
{
alert(this.name);
var target = e.srcElement || e.target;
alert(target.href);
}var myobj = new Object();
myobj.name = "这是我的名字";var mylink = window.document.getElementById("mylink");
AttachEvent("click", mylink, MyLink_Click, myobj);</script>
</body></html>着重解释一下红色字体部分.
多谢各位赐教!
如果是的话,我查了call的用法,handler.call(owner, e);这句好象是用owner的方法替换handler,那么owner不是参数?不明白,见笑了,能不能指点一下,诚恳求教!
<script>
owner = {id:'a',name:'b'}
function handler(myparam)
{
alert(this.id+' '+this.name+' '+myparam)
}
handler.call(owner, 'c');//will alert 'a b c';
</script>