我写了一段测试代码,目的是按下“添加事件”按钮后在红色的div区域绑定一个onclick事件,即鼠标点击div区域时触发test3方法,按下“取消事件”按钮取消div区域绑定的onclick事件爱你,即鼠标点击div区域时什么都不做,代码如下,但我发现了个问题,点击“取消事件”按钮并没有取消onclick事件,而且多次点击“添加事件”按钮会多次绑定onclick事件,即test3方法被触发了多次,不知是何原因,望高手给予解答,代码中Function.prototype.bindAsEventListener方法来自prototype,window.CEvent方法来自一个开源的地图程序。
<script>
Function.prototype.bindAsEventListener = function(object) {
var __method = this;
return function(event) {
return __method.call(object, event || window.event);
}
}//自定义事件处理
window.CEvent = {
addListener: function(obj, target, act) {
if (obj.attachEvent) obj.attachEvent('on' + target, act);
if (obj.addEventListener) obj.addEventListener(target, act, false);
},
removeListener: function(obj, target, act) {
if (obj.detachEvent) obj.detachEvent('on' + target, act);
if (obj.removeEventListener) obj.removeEventListener(target, act, false);
}
}function test1() {
var divobj = document.getElementById('mydiv');
CEvent.addListener(divobj, 'click', test3.bindAsEventListener(divobj));
}function test2() {
var divobj = document.getElementById('mydiv');
CEvent.removeListener(divobj, 'click', test3.bindAsEventListener(divobj));
}function test3(evt) {
alert('div的onclick事件被触发!');
}
</script><div style="width:300;height:200;background-color:#FF0000" id="mydiv"></div>
<input type="button" value="添加事件" onclick="test1()" />
<input type="button" value="取消事件" onclick="test2()" />
<script>
Function.prototype.bindAsEventListener = function(object) {
var __method = this;
return function(event) {
return __method.call(object, event || window.event);
}
}//自定义事件处理
window.CEvent = {
addListener: function(obj, target, act) {
if (obj.attachEvent) obj.attachEvent('on' + target, act);
if (obj.addEventListener) obj.addEventListener(target, act, false);
},
removeListener: function(obj, target, act) {
if (obj.detachEvent) obj.detachEvent('on' + target, act);
if (obj.removeEventListener) obj.removeEventListener(target, act, false);
}
}function test1() {
var divobj = document.getElementById('mydiv');
CEvent.addListener(divobj, 'click', test3.bindAsEventListener(divobj));
}function test2() {
var divobj = document.getElementById('mydiv');
CEvent.removeListener(divobj, 'click', test3.bindAsEventListener(divobj));
}function test3(evt) {
alert('div的onclick事件被触发!');
}
</script><div style="width:300;height:200;background-color:#FF0000" id="mydiv"></div>
<input type="button" value="添加事件" onclick="test1()" />
<input type="button" value="取消事件" onclick="test2()" />
Function.prototype.bindAsEventListener = function(object) {
var __method = this;
return function(event) {
return __method.call(object, event || window.event);
}
}//自定义事件处理
window.CEvent = {
addListener: function(obj, target, act) {
if (obj.attachEvent) obj.attachEvent('on' + target, act);
if (obj.addEventListener) obj.addEventListener(target, act, false);
},
removeListener: function(obj, target, act) {
if (obj.detachEvent) obj.detachEvent('on' + target, act);
if (obj.removeEventListener) obj.removeEventListener(target, act, false);
}
}
var linten=null;
function test1() {
var divobj = document.getElementById('mydiv');
linten=test3.bindAsEventListener(divobj)
CEvent.addListener(divobj, 'click', linten);
}function test2() {
var divobj = document.getElementById('mydiv');
CEvent.removeListener(divobj, 'click', linten);
}function test3(evt) {
alert('div的onclick事件被触发!');
}
</script><div style="width:300;height:200;background-color:#FF0000" id="mydiv"></div>
<input type="button" value="添加事件" onclick="test1()" />
<input type="button" value="取消事件" onclick="test2()" />
再就是你说的点击添加多次多次调用test3方法,这是可定的,点一次添加就执行一次方法啊,若你想点一次后就不调用test3,你可以加个自增数,点一下加一,若是这个数大于1曾不执行test3方法呗。