<!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>如何向事件绑定函数传递参数??</title>
<script language="javascript">function onload(){
var Item = document.getElementById("MM");
Item.onmousemove = fn;  //问题在这!!!请教: 这里如何向fn函数传递参数而又不会让事件失效????????
}var fn = function(e){  //摸一摸两百多,我这里放一个参数e来收钱,一旦你摸到我你必须得给我钱(传参数),不然我不让你玩,哼..
if(e == undefined){
alert("你这色鬼,不给钱也想玩?滚!!");
return false;
}else{
      alert("我是很美很害羞的MM,你摸到我啦!谢谢你给我"+e+"块钱");
}
}
</script>
</head><body onload="onload();" >
<div id="MM" style="width:400px; height:250px; background:#060; color:#FFF; margin:0 auto; text-align:center;">我是很美丽很害羞的MM,你摸摸我看看..</div>
</body>
</html>

解决方案 »

  1.   

    Item.onmousemove = function(e){fn(e)};
    发这么多帖,我都回回混分~
      

  2.   

    你这个很简单的,只改一点点就可以了
    <script language="javascript">function onload(){
        var Item = document.getElementById("MM");
        Item.onmousemove = function()
                             {
                               fn(100);//这就是答案、                         }; 
         var fn = function(e){  //摸一摸两百多,我这里放一个参数e来收钱,一旦你摸到我你必须得给我钱(传参数),不然我不让你玩,哼..
            if(e == undefined){
                alert("你这色鬼,不给钱也想玩?滚!!");
                return false;
            }else{
                 alert("我是很美很害羞的MM,你摸到我啦!谢谢你给我"+e+"块钱");
            }
    }
    </script>
      

  3.   

    这种算简单的,还有些更复杂的事件函数参数传值,要用对象来传递,呵呵。
    像你这个,还可以用的方法是
    Item.e=100;
    Item.onmousemove=fn;
    function fn()
    {
      var e=event.srcElement.e;//这样也可以获得这个参数,简单吧
    }
      

  4.   

    我也知道这样可以,可是如果我要传的参数必须得在外面定义呢?比如
    function Class(){
    this.money = 250;
    function playGirl(){
    Item.onmousemove = function(this.money){fn(this.money)};
    //试问你这里的参数this.money还能正常引用上面定义的250吗?不能也...}}
      

  5.   

    我也知道这样可以,可是如果我要传的参数必须得在外面定义呢?比如
    function Class(){
    this.money = 250;
    function playGirl(){
    Item.onmousemove = Item.onmousemove = function()
      {
      fn(this.money);//试问你这里的参数this.money还能正常引用上面定义的250吗?不能也...};  
    };
    //试问你这里的参数this.money还能正常引用上面定义的250吗?不能也...}}
      

  6.   

    再次说明,不允许直接绑定函数体,要绑定函数的句柄或引用,因为事件处理函数定义在事件外层。即fn不要定义在onload(){}里面.
      

  7.   

    不明白你到底想要什么答案function Class(){
    var money = 250;
    function playGirl(){
    Item.onmousemove = function(){
    fn(money);//试问你这里的参数this.money还能正常引用上面定义的250吗?不能也...
    };  
    };//试问你这里的参数this.money还能正常引用上面定义的250吗?不能也...
    playGirl();//这个函数都没有运行怎么有结果啊
    }
      

  8.   

    5楼的应该OK啊  将参数放入evnet中 
      

  9.   

    实在觉的不方便可以这样 
    onclick="javascript:addHeight($('#LeakedDiv'))"可以将参数放入到一个控件中
      

  10.   

    你再写个
    var money=this.money;
    不久可以了!局部变量在局部函数中是可以访问的
    还有我说的第二种方法也是不会有这个问题的
    item.e=this.money;
    item.onmouseover=fn;
    function fn()
    {
      var money=event.srcElement.e;
    }
    这个问题我回答第四次了,日。
    我写控件的时候遇到的参数传递问题比你这个复杂多了也都解决了的的
    }
      

  11.   

    <script language="javascript">function onload(){
        var money="xxxxx";   //定义参数
        var Item = document.getElementById("MM");
        Item.onmousemove = bind(money);   //这边改成利用闭包实现试试
    }//加这段试试
    function bind(e)
    {
       return function(){fn(e);};
    }
    var fn = function(e){  //摸一摸两百多,我这里放一个参数e来收钱,一旦你摸到我你必须得给我钱(传参数),不然我不让你玩,哼..
            if(e == undefined){
                alert("你这色鬼,不给钱也想玩?滚!!");
                return false;
            }else{
                 alert("我是很美很害羞的MM,你摸到我啦!谢谢你给我"+e+"块钱");
            }
    }
    </script>
      

  12.   

           function Bind(obj,fun) {
                return function () {
                    fun.apply(obj, [1, 2]);
                    //[1, 2]是传给ResponseHandle的参数,见过别人这样取参数的var args = Array.prototype.slice.call(arguments); 
                }
            }        
    function AjaxClass() {
                this.URL = ""; this.Type = '';
                this.XHR = this.Create();
                this.Result = '';
            }
            AjaxClass.prototype =
            {
                Create: function () {
                    var xmlHttp = false;
                    if (window.XMLHttpRequest) {
                        //在非IE中创建XMLHttpRequest对象 
                        xmlHttp = new XMLHttpRequest();
                    }
                    else if (window.ActiveXObject) {
                        try {
                            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
                            //高版本IE 
                        } catch (error1) {//创建IP高版本XMLHttpRequest对象失败 
                            try {
                                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                                //低版本IE 
                            } catch (error2) { //创建IP低版本XMLHttpRequest对象失败 
                                xmlHttp = false;
                            }
                        }
                    }
                    if (!xmlHttp) {
                        alert("创建XMLHttpRequest对象失败!程序无法运行,请检查您的浏览器类型与版本!");
                        return false;
                    }
                    return xmlHttp;
                },
                ResponseHandle: function () {
                    //alert(this.XHR); 关键之处:问题出在这里,通过this引用的成员比如this.XHR都会显示undefined,我要的就是能正常引用上面的成员。
                    if (this.XHR.readyState == 1) { this.Result = "正在等待执行..."; }
                    if (this.XHR.readyState == 4 || this.XHR.readyState == "complete") {
                        debugger;
                        alert("等于4啦");
                        if (this.XHR.status == 200) {
                            if (this.Type == 'XML') {
                                this.Result = this.XHR.responseXML;
                            }
                            else {
                                this.Result = this.XHR.responseText;
                            }
                        }
                    }
                },
                Get: function (TagetURL, ResponseType) {
                    this.URL = TagetURL + "&randcode=" + (new Date()).valueOf();
                    if (ResponseType != undefined && TagetURL != undefined) {
                        this.Type = ResponseType.toUpperCase(); 
                    }
                    if (window.XMLHttpRequest) {
                        this.XHR.open("get", this.URL); 
                        this.XHR.onreadystatechange = Bind(this,this.ResponseHandle);//关键之处,问题源头在这里。通过这里引用this.ResponseHandle函数,注意这里不能写成this.ResponseHandle(),否则没效果,所以没有()就不能传送参数了。                    this.XHR.send(null);
                    }
                    else {
                        this.XHR.open("get", this.URL, true);
                        this.XHR.onreadystatechange = this.ResponseHandle; this.XHR.send();
                    }
                }
            }
            var obj = new AjaxClass();
            obj.Get("TreeHandler.ashx?id=0");
      

  13.   

           function Bind(obj,fun) {
                return function () {
                    fun.apply(obj, [1, 2]);
                    //[1, 2]是传给ResponseHandle的参数,见过别人这样取参数的var args = Array.prototype.slice.call(arguments); 
                }
            }        
    function AjaxClass() {
                this.URL = ""; this.Type = '';
                this.XHR = this.Create();
                this.Result = '';
            }
            AjaxClass.prototype =
            {
                Create: function () {
                    var xmlHttp = false;
                    if (window.XMLHttpRequest) {
                        //在非IE中创建XMLHttpRequest对象 
                        xmlHttp = new XMLHttpRequest();
                    }
                    else if (window.ActiveXObject) {
                        try {
                            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
                            //高版本IE 
                        } catch (error1) {//创建IP高版本XMLHttpRequest对象失败 
                            try {
                                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                                //低版本IE 
                            } catch (error2) { //创建IP低版本XMLHttpRequest对象失败 
                                xmlHttp = false;
                            }
                        }
                    }
                    if (!xmlHttp) {
                        alert("创建XMLHttpRequest对象失败!程序无法运行,请检查您的浏览器类型与版本!");
                        return false;
                    }
                    return xmlHttp;
                },
                ResponseHandle: function () {
                    //alert(this.XHR); 关键之处:问题出在这里,通过this引用的成员比如this.XHR都会显示undefined,我要的就是能正常引用上面的成员。
                    if (this.XHR.readyState == 1) { this.Result = "正在等待执行..."; }
                    if (this.XHR.readyState == 4 || this.XHR.readyState == "complete") {
                        debugger;
                        alert("等于4啦");
                        if (this.XHR.status == 200) {
                            if (this.Type == 'XML') {
                                this.Result = this.XHR.responseXML;
                            }
                            else {
                                this.Result = this.XHR.responseText;
                            }
                        }
                    }
                },
                Get: function (TagetURL, ResponseType) {
                    this.URL = TagetURL + "&randcode=" + (new Date()).valueOf();
                    if (ResponseType != undefined && TagetURL != undefined) {
                        this.Type = ResponseType.toUpperCase(); 
                    }
                    if (window.XMLHttpRequest) {
                        this.XHR.open("get", this.URL); 
                        this.XHR.onreadystatechange = Bind(this,this.ResponseHandle);//关键之处,问题源头在这里。通过这里引用this.ResponseHandle函数,注意这里不能写成this.ResponseHandle(),否则没效果,所以没有()就不能传送参数了。                    this.XHR.send(null);
                    }
                    else {
                        this.XHR.open("get", this.URL, true);
                        this.XHR.onreadystatechange = this.ResponseHandle; this.XHR.send();
                    }
                }
            }
            var obj = new AjaxClass();
            obj.Get("TreeHandler.ashx?id=0");