最近在写网页的时候,为了缩减代码的重复,提高代码的利用率,我把经常用的代码封装成一个方法,后面需要用的时候直接调用。
但是我在js的点击事件上遇到了这样一个问题:点击事件onclick用函数赋值的时候,并未给点击事件赋值,而是自己执行了函数。
我的代码如下:
window.onload=function(){
var gdenglu=document.getElementById('gdenglu');
var udenglu=document.getElementById('udenglu');
var guser=document.getElementsByClassName('guser')[0];
var user=document.getElementsByClassName('user')[0];
var swopnav=function(a,b){
a.style.zIndex=1;
b.style.zIndex=0;
console.log("123123");
}
//12-14行代码未能给点击事件正确赋值
guser.onclick=swopnac(guser,user);
user.onclick=swopnac(user,guser);
//以下注释的为正确代码
/* gdenglu.onclick=function(){
swopnav(guser,user);
};
udenglu.onclick=function(){
swopnav(user,guser);
} */
};
以上代码执行后,点击了没有反应,并且一开始控制台就有了123123
解决方法!
通过浏览器F12断点一步一步查询后发现:
- 点击事件如果赋值的函数是需要传参数的,则不会给点击事件赋值函数对象,而是函数自己本身会自动执行(故控制台会有123123),并且点击事件没有赋值,为null。
- 如果赋值的函数有参数,又想让它能够生效,则可以写:
对象.onclick=function(){ 函数名(参数); };
- 如果函数本身不需要传递参数,则
对象.onclick=函数名;
就可以生效。(注意,函数名不要加括号)