定义和处理事件

有几种定义事件处理的方式,根据使用时的场合自己选择合适的用法。

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,而不是Calendarthis
        alert(this.mgrobj.id)
    }
}

[ 编辑 | 历史 ]
最近由“jilili”在“2018-11-11 12:51:03”修改