定义和处理事件
有几种定义事件处理的方式,根据使用时的场合自己选择合适的用法。
1)在标签上指定事件处理函数
<button onclick="click_me" id="btnclick">点我</button>
简单事件处理
function click_me() {
alert("你点了我!^_^");
}
2)使用JS添加事件1
document.getElementById("btnclick").onclick = function() {
alert("你点了我!^_^");
}
3)使用JS添加事件2
function on(dom, eType, func) {
if(dom.addEventListener) { // DOM 2.0
dom.addEventListener(eType, function(e){
func(e);
});
} else if(dom.attachEvent){ // IE5+
dom.attachEvent('on' + eType, function(e){
func(e);
});
} else { // DOM 0
dom['on' + eType] = function(e) {
func(e);
}
}
}
//
on(document.getElementById("btnclick"), "click", function(){
alert("你点了我!^_^");
});
事件处理函数中的this是啥?
// this就是拥有这个事件的对象(被定义、注册事件的对象);
function click_me() {
alert(this);
}
如何在事件中传递对象和参数?
事件处理函数中只能有一个对象被传递(event),如何在事件处理中获取额外的参数?
function do_cust_act(event) {
// event.currentTarget,也就是this,他是被绑定事件的对象,当事件被触发前可以对这个对象定义一个属性,将需要传递的值赋给自定义属性,在这个事件中就可以拿到。
// event.target
}
具体如下:
Calendar = function(id) {
this.id = id;
...
this.init = function() {
// 获取按钮对象,点击此按钮触发事件。
var btnToNextMonth = ...;
// 给按钮(下个月)赋值,因为事件中需要调用Calender对象
btnToNextMonth.mgrobj = this;
// 给下个月按钮添加事件
btnToNextMonth.addEventListener("onclick", this.toNextMonth)
}
...
// 事件处理程序
this.toNextMonth = function() {
// 从this中获取Calendar对象,注意这个函数里的this,它==event.currentTarget,而不是Calendar的this;
alert(this.mgrobj.id)
}
}
