为什么JS事件函数里面都有一个参数

JavaScript012

为什么JS事件函数里面都有一个参数,第1张

因为ev是事件的参数啊!在ev中包含了事件触发时的参数,比如click事件的ev中包含着.e.pageX,e.pageY,keydown事件中包含着ev.keyCode等,在ie中,ev是全局的可以通过window.event来获取,在其他浏览器中都是作为参数传入的。

所以好多事件函数都是这样写:

mydiv.onclick = function(ev){

if(!ev){ev = window.event} //这句也可以简写成:ev=window.event||ev

alert(ev.pageX+","+ev.pageY)

}

你好,举个例子,先说JavaScript中事件句柄函数的this和even.target。

由于JavaScript的事件模型中,事件触发开始,有一个捕获阶段和冒泡阶段(详见:关于JavaScript的addEventListener第三个参数的注记)。所以触发元素分为精准触发元素和不精准触发元素。例如,在下面的结构中:

<div class="outer" id="outer">    <div class="mid" id="mid">

        <input type="button" class="active" id="inner" value="inner">

    </div></div>

假设三个相互嵌套的元素都有一个onclick点击事件句柄。那么当我点击按钮时触发点击事件,那么这个事件可以被这三个元素捕获,那么最内层的按钮元素,也就是我精确点击的元素,我称作:“精准触发元素”;相应的,剩下的两个就是“不精准触发元素”。

那么,由于触发事件句柄的回调函数中,第一个参数总是event实例,它有一个target的属性,指向的就是“精准触发元素”,而在“不精准触发元素”的回调函数中,this指向的就是元素本身,而event.target指向的就是那个“精准触发元素”,二者可以区分。

可以想见,在“精准触发元素”的事件函数内部,应该有this===event.target,而事实也确实如此。

如果用原生JavaScript代码或者jQuery都可以验证:

//原生

JavaScriptdocument.getElementById("inner").onclick=function(event){    console.log(this===event.target)

} //jQuery+匿名函数

$("#inner").click(function(event){    console.log(event.target===this)

})

但是当使用箭头函数验证时要格外注意。例如,下面代码验证的是错误的,因为箭头函数的this指向的不是本元素,而是全局变量window:

//错误

$("#inner").click((event)=>{    console.log(event.target===this)

})

我们需要给它手动绑定:

//正常

$("#inner").click((function(){    return (event)=>{        console.log(event.target===this)

    }

}).call($("#inner")[0]))

除了这2个,还有下面这些

传入的参数,一般是 函数名 参数多写在函数调用的。

希望采纳

方法一:通过事件在html中的内联方式来传递参数(假定变量x是参数,下同):

<input type="button" value="点我" onclick="var x=123test(x)"/>

<script>

function test(x){

   alert(x)

}

</script>

方法二:通过全局变量来传递参数:

<input id="abc" type="button" value="点我"/>

<script>

var x=123

window.onload=function(){

   document.getElementById("abc").onclick=function(){

      alert(x)

   }

}

</script>

方法三:通过对象的自定义属性来传递参数:

<input id="abc" type="button" value="点我"/>

<script>

window.onload=function(){

   var abc=document.getElementById("abc")

   abc.x=123

   abc.onclick=function(){

      alert(this.x)

   }

}

</script>

方法四:利用闭包:

<input id="abc" type="button" value="点我"/>

<script>

window.onload=function(){

   (function(x){

      document.getElementById("abc").onclick=function(){

         alert(x)

      }

   })(123)

}

</script>

暂时就想到这么多了,肯定还有其他方法的。