<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title> 显出你的身手 </title>
</head>
<body>
<script language="javascript"> function $(id)
{
return document.getElementById(id);
}
function AddEvent() //参数有无,自己决定。完成该功能,功能编写方法随便自己的喜欢。
{
//this.setAttribute("onmouseout",funck)
for(var i=0;i<arguments.length;i++)
{
this.attachEvent(arguments[i][0],(function(x){var arg=arguments.callee.caller.arguments[x];return function(){arg[1].call(this,arg[2])}})(i))
}
}
function funck() //自己定义
{
alert("funck "+arguments[0]);
}
</script> <div id="addev" onmouseover="Test(this)"> 测试添加事件 </div>
<script language="javascript">
var _i=0;
function Test(objs)
{
AddEvent.apply(objs,[["onmouseout",funck,_i++],["onmouseout",funck,_i++]])//根据上面写的相对应。
}
</script>
<div id="debug"></div>
</body>
</html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title> 显出你的身手 </title>
</head>
<body>
<script language="javascript"> function $(id)
{
return document.getElementById(id);
}
function AddEvent() //参数有无,自己决定。完成该功能,功能编写方法随便自己的喜欢。
{
//this.setAttribute("onmouseout",funck)
for(var i=0;i<arguments.length;i++)
{
this.attachEvent(arguments[i][0],(function(x){var arg=arguments.callee.caller.arguments[x];return function(){arg[1].call(this,arg[2])}})(i))
}
}
function funck() //自己定义
{
alert("funck "+arguments[0]);
}
</script> <div id="addev" onmouseover="Test(this)"> 测试添加事件 </div>
<script language="javascript">
var _i=0;
function Test(objs)
{
AddEvent.apply(objs,[["onmouseout",funck,_i++],["onmouseout",funck,_i++]])//根据上面写的相对应。
}
</script>
<div id="debug"></div>
</body>
</html>
第一次鼠标放上去然后离开: 弹出 funck 1, 弹出funck 0 正确!我想要的,渴望要的。
第二次再放上去,鼠标离开:弹出 funck 2, 弹出funck 3,弹出 funck 1, 弹出funck 0 我只要他 弹出 funck 1, 弹出funck 0 就可以了。多了两次!
<div id="addev" > 测试添加事件 </div>
<script>
AddEvent(参数);
</script>----------------------------------------------------------------------------------------To gzdiablo 你有疑问吗?
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title> 显出你的身手 </title>
</head>
<body>
<script language="javascript"> function $(id)
{
return document.getElementById(id);
}
function AddEvent() //参数有无,自己决定。完成该功能,功能编写方法随便自己的喜欢。
{
//this.setAttribute("onmouseout",funck)
//this.attachEvent(arguments[i][0],)
var en = arguments[0];
this[en]=function()
{
var funcs = this[en+"_funcs"];
for(var i=0;i<funcs.length;i++) funcs[i].call()
}
this[en+"_funcs"]=[];
for(var i=1;i <arguments.length;i++)
{
this[en+"_funcs"][i-1]=(function(x){var arg=arguments.callee.caller.arguments[x];return function(){arg[0].call(this,arg[1])}})(i)
}
}
function funck() //自己定义
{
alert("funck "+arguments[0]);
}
</script> <div id="addev" onmouseover="Test(this)"> 测试添加事件 </div>
<script language="javascript">
var _i=0;
function Test(objs)
{
AddEvent.apply(objs,["onmouseout",[funck,"1"],[funck,"2"]])//根据上面写的相对应。
}
</script>
<div id="debug" onclick="alert(addev.onmouseout)"> dsf</div>
</body>
</html>
{
return document.getElementById(id);
}
function AddEvent(对象,事件名,函数名) //参数有无,自己决定。完成该功能,功能编写方法随便自己的喜欢。
{
}
function fun() //自己定义
{
alert("Ok);
}
</script> <div id="addev" onmouseover="Test(this)"> 测试添加事件 </div> <script language="javascript"> function Test(objs)
{
AddEvent(对象,事件名,函数名);
}
</script> -----------------------------------------------------------------------------------------解释:原来
<div onmouseover="Test(this)">dddd</div>
鼠标放上去执行一次: AddEvent(对象,事件名,函数名); 如:AddEvent(this,"onmouseout",fun);
相当:odiv.addEventListener("onclick",fun); 结果:
<div onmouseover="Test(this)" onmouseout="fun()" >dddd</div> //对吗??再执行一次: AddEvent(对象,事件名,函数名); 如:AddEvent(this,"onmouseout",fun); 相当于:odiv.addEventListener("onclick",fun); 结果:
<div onmouseover="Test(this)" onmouseout="fun() fun()" >dddd</div> //对吗??问题是:我要的是
onclick="fun()“
而不是
onclick="fun() fun()"
function Tests(objs)
{
AddElementEvent(objs,'mouseout',setn,[setn参数放后面]);
}不变,apply() 放在AddElementEvent() 里。
function padd()
{
//实现添加这个事件的过程。
}function fun() //自己写的,有可能有参数。
{
alert("OK");
}function test()
{
padd(对象,事件名(onmouseout),函数名(fun),[函数参数]);
} 在任何一个对象的事件(onmouseup="funu()")对应的函数(funu())里 调用 padd(对象,事件名(onmouseup),函数名(other_fun),[函数参数1],[函数参数2],[函数参数3]);
来增加相对的事件(onclick="other_fun(1,3,'name')")。
所以要考虑全面,而且通用。
js事件有多少呢?起码也有(>20),所以要做为个参数, 然后给事件对应的函数 也要有参数吧。
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head><body>
<div style="width:100px;height:100px;border:1px solid #000;" onmouseover="test();" id="a1">测试1</div>
<div style="width:100px;height:100px;border:1px solid #000;" onmouseover="test();" id="a2">测试2</div>
</body>
</html>
<script language="javascript">
function test()
{
padd(document.getElementById("a1"),"onmouseout","fun",1,2,3);
padd(document.getElementById("a1"),"onclick","fun",1,2,3,4,5,6,7,8);
padd(document.getElementById("a2"),"onmouseout","fun",4,5,6);
}
function padd(obj,eventkey,handler)
{
var arg = [];
for(var i=3,l=arguments.length;i<l;i++)arg[arg.length] = arguments[i];
handler = eval(handler);
if(obj && obj[eventkey]==null && typeof(handler)=="function")
obj[eventkey] = function(){handler.call(obj,arg);}
}
function fun()
{
var arg = [];
for(var i=0,l=arguments.length;i<l;i++)arg[arg.length] = arguments[i];
alert(arg);
}
</script>
不实现参数, 动态添加的事件能实现参数?
只能在添加的函数内部以 arguments.length 判断.----------------------<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>shawl.qiu template</title>
<style type="text/css">
/* <![CDATA[ *//* ]]> */
</style>
<script type="text/javascript">
/*<![CDATA[*/
if (navigator.appName=="Microsoft Internet Explorer")
{
//最大化窗口
self.moveTo(-5,-5)
self.resizeTo(screen.availWidth +8,screen.availHeight+8)
//这个脚本定义的宽度其实比原窗口还要大那么一点.
}
/*]]*/
</script>
</head>
<body>
<html>
<head>
<div id="XDiv" onmouseover="Test(this)"> 测试添加事件 </div><script language="javascript">
var _GlobalCount = 1;function Test(Ele)
{
_GlobalCount = 1;
defaultStatus = "";
fPlusEvent(Ele, "onmouseout", fFunc)
}
function fFunc() //自己定义
{
if(_GlobalCount===1)
{
defaultStatus = _GlobalCount;
}
else
{
defaultStatus += ", "+_GlobalCount;
}
_GlobalCount++;
}function fPlusEvent(Obj, sEvtName, Func)
{// shawl.qiu code, void return
if(document.addEventListener)
{
sEvtName = sEvtName.replace(/^on/i, "");
Obj.addEventListener(sEvtName, Func, false);
}
else if(document.attachEvent)
{
if(Obj[sEvtName] == null)
{
Obj[sEvtName] = Func;
}
else
{
Obj.attachEvent(sEvtName, Func);
}
}
} // end function fPlusEvent
function __E(sTag, oDocument)
{ // shawl.qiu code, return Element
if(!oDocument) oDocument = document;
return oDocument.createElement(sTag);
} // end function __E(sTag, oDocument)
function __Id(sTag, oDocument)
{ // shawl.qiu code, return Element
if(!oDocument) oDocument = document;
return oDocument.getElementById(sTag);
} // end function __Id(sTag, oDocument)
</script>
</html>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head><body>
<div style="width:100px;height:100px;border:1px solid #000;" onmouseover="test();" id="a1">测试1</div>
<div style="width:100px;height:100px;border:1px solid #000;" onmouseover="test();" id="a2">测试2</div>
</body>
</html>
<script language="javascript">
var i=0;
function $AE(o,_eventKey,_handler,bubble)
{
_eventKey = _eventKey.replace(/^on/i,"");
if(document.all)
o.attachEvent(["on", _eventKey].join(''),_handler);
else
o.addEventListener(_eventKey,_handler,!!bubble);
}
function $(_id){return document.getElementById(_id);}
function test()
{
i++;
padd($("a1"),"onmouseout","fun",i);
padd($("a2"),"onmouseout","fun",i);
}
function padd(obj,eventkey,handler)
{
var arg = [];
for(var i=3,l=arguments.length;i<l;i++)arg[arg.length] = arguments[i];
handler = eval(handler);
if(obj && typeof(handler)=="function")
$AE(obj,eventkey,function(){handler.call(obj,arg);},true)
}
function fun()
{
var arg = [];
for(var i=0,l=arguments.length;i<l;i++)arg[arg.length] = arguments[i];
alert(arg);
}
</script>
我要杜绝多次绑定!!?我的问题所在。
function fun()
{
alert("OK");
}改成上面的代码后测试 你的代码,出现 4里所说的
小提示:你鼠标放上去第一次是正确,鼠标离开是执行一次 ;第二次再放上去,鼠标离开是执行两次,依次类推。
备注:我的代码就是你那个模式写的。结果跟你的一样。
defaultStatus 默认的。
多次测试的时候
数据如下:
一次:1
二次:1,2
三次:1,2,3
四次:1,2,3,4
因为你用了全局变量来记数我希望的是:不管你鼠标放上去是几次,鼠标离开的话就只能是同一个数据 1 。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head><body>
<div style="width:100px;height:100px;border:1px solid #000;" onmouseover="test();" id="a1">测试1</div>
<div style="width:100px;height:100px;border:1px solid #000;" onmouseover="test();" id="a2">测试2</div>
</body>
</html>
<script language="javascript">
var i=0;
function $(_id){return document.getElementById(_id);}
function test()
{
i++;
padd($("a1"),"onmouseout","fun",i);
padd($("a2"),"onmouseout","fun",i);
}
function padd(obj,eventkey,handler)
{
var arg = [];
for(var i=3,l=arguments.length;i<l;i++)arg[arg.length] = arguments[i];
handler = eval(handler);
if(obj && obj[eventkey]!=null && typeof(handler)=="function")//允许修改参数就去掉对obj[eventkey]!=null的判断 不允许修改参数就加上
obj[eventkey] = function(){handler.call(obj,arg);};
}
function fun()
{
var arg = [];
for(var i=0,l=arguments.length;i<l;i++)arg[arg.length] = arguments[i];
alert(arg);
}
</script>
if(obj && obj[eventkey]==null && typeof(handler)=="function")//允许修改参数就去掉对obj[eventkey]==null的判断 不允许修改参数就加上