定义和处理事件
有几种定义事件处理的方式,根据使用时的场合自己选择合适的用法。
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) } }