❶ javascript中使用attachEvent添加了匿名函数事件,如何用detachEvent移除这个事件
做这种东西,建议你用js库去做,
或者你不想用jQuery这种体积庞大的库(也不算大,最新版本80多k,可以压缩到50多k)
可以用CJL这种小库,对原生的js做了些基本的兼容.体积只有6k不到.
再或者你自己封装些常用的兼容,方法.
看下我这个爱墙的拖动怎么样?
http://shirne.com/love
下面是我以前写的拖动插件,不明白的地方随时找我.
//用法$("id1").startDrag($("id2"));
//id1为鼠标启用效果的元素,id2为移动的元素
//例如,有一个div元素,内有一个h2标签作为这个div版块的标题.就可以在h2上启用拖动来移
//动div元素,而在div内的其它地方则不启用拖动
var d=document;
d.addListener=function(e,f,b){
this.attachEvent?this.attachEvent('on'+e,f):this.addEventListener(e,f,b);
}
d.removeListener=function(e,f,b){
this.detachEvent?this.detachEvent('on'+e,f):this.removeEventListener(e,f,b);
}
function $(){
var o=document.getElementById(arguments[0]);
o.addListener=function(e,f,b){
this.attachEvent?this.attachEvent('on'+e,f):this.addEventListener(e,f,b);
}
o.removeListener=function(e,f,b){
this.detachEvent?this.detachEvent('on'+e,f):this.removeEventListener(e,f,b);
}
o.startDrag=function(obj){
var obj=obj?obj:o;
var sx,sy;
o.style.cursor="move";
o.addListener("mousedown",function(e){
e||event;
if(e.button==1||e.button==0){
sx=e.clientX-obj.offsetLeft;sy=e.clientY-obj.offsetTop;
d.addListener("mousemove",move,false);
d.addListener("mouseup",stopDrag,false);
}
},false);
var stopDrag=function(){
d.removeListener("mousemove",move,false);
d.removeListener("mouseup",stopDrag,false);
}
var move=function(e){
e||event;
window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
if(e.preventDefault)e.preventDefault();
with (obj.style){
position="absolute"
left=e.clientX-sx+"px";
top=e.clientY-sy+"px";
}
}
}
return o;
}
要移除事件监听,除了用函数名外,还可以用索引。
如:delete element.events[type][0]
除非你十分确定,否则用索引删除可能会出问题
❷ javascript中总是报错:attachEvent is not defined
window对象的attachEvent方法只在IE浏览器中有效,其它浏览器不支持这个方法,所以报错。
❸ javascript中window.attachevent()和document.attachevent()这两种方法绑定有什么区别,分别在什么时候用
element.attachevent
是指针对什么对象绑定
window一般绑定 onload对象
document可以绑定很多 一般元素的事件都可以绑定
鼠标 键盘事件都可以 该方法只针对ie
w3c是用addEventListener 进行绑定的!
❹ JS如何实现方法监听
监听方法在中的实现如下:
function addEventListener(string eventFlag, function eventFunc, [bool useCapture=false])
eventFlag : 事件名称,如click、mouseover…
eventFunc: 绑定到事件中执行的动作
useCapture: 指定是否绑定在捕获阶段,true为是,false为否,默认为true
在事件监听流中可以使用event.stopPropagation()来阻止事件继续往下流
IE中使用自有的attachEvent函数绑定时间,函数定义如下:
function attachEvent(string eventFlag, function eventFunc)
eventFlag: 事件名称,但要加上on,如onclick、onmouseover…
eventFunc: 绑定到事件中执行的动作
在事件监听流中可以使用window.event.cacenlBubble=false来阻止事件继续往下流
总结:addEventListener(string eventFlag, function eventFunc, [bool useCapture=false]),针对ff,chrome,safari浏览器,false指冒泡阶段,默认为true,指捕获阶段。不过一般我们都用false。
attachEvent(string eventFlag, function eventFunc),针对ie系列、还有opera浏览器,少了事件处理机制的参数,只指定事件类型(别忘了on)和触发哪个函数。
❺ JS通过函数名调用函数
调用方式:
方法调用模式
函数调用模式
构造器调用模式
1:方法调用模式。
/*方法调用模式*/
var myobject={
value:0,
inc:function(){
alert(this.value)
}
}
myobject.inc()
2:函数调用模式
/*函数调用模式*/
var add=function(a,b){
alert(this)//this被绑顶到window
return a+b;
}
var sum=add(3,4);
alert(sum)
3:构造器调用模式
var quo=function(string){
this.status=string;
}
quo.prototype.get_status=function(){
return this.status;
}
var qq=new quo("aaa");
alert(qq.get_status());
4:apply调用模式
/*apply*/
var arr=[10,20];
var sum=add.apply(myobject,arr);
alert(sum);