❶ 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);