一般来说,通过JS来修改HTML元素的onclick动作有四种方法:
第一种:button.onclick = Function("alert('hello');");
第二种:button.onclick = function(){alert("hello"); };
第三种:
button.onclick = myAlert;
function myAlert() {
alert("hello");
}
第四种:
这种情况更加动态,更为实用,而且还能添加多个函数(添加的事件的顺序即执行顺序)
if(window.addEventListener){ // Mozilla, Netscape, Firefox
//element.addEventListener(type,listener,useCapture);
button.addEventListener('click', alert('11'), false);
button.addEventListener('click', alert('12'), false);//执行顺序11 -> 12
} else { // IE
button.attachEvent('onclick', function(){alert('21');});
button.attachEvent('onclick', function(){alert('22');});执行顺序22 -> 21
}
在不考虑第四种方法的情况下,如果想复用为特定元素(以button为例)的onclick动作,比如两个buttons同时调用同一个函数代码段,则需要使用第三种方法,即抛弃匿名函数的定义。
但在这种情况下,如果方法带有参数,则会出现问题。举例:
function moveBackward(num) {
options.hAxis.viewWindow.min += num;
options.hAxis.viewWindow.max += num;
validateIndex();
drawChart();
}
function moveForward(num) {
options.hAxis.viewWindow.min -= num;
options.hAxis.viewWindow.max -= num;
validateIndex();
drawChart();
}
prevButton.onclick = moveForward;
nextButton.onclick = moveBackward;}
加入我们通过方法三绑定事件,则无法添加参数。假如强行在绑定时候添加参数,例如:
prevButton.onclick = moveForward(1);
nextButton.onclick = moveBackward(1);
则会导致页面在首次加载的时候自动执行一次该函数,无论元素是否被点击。
对此,我的解决办法是,在函数中添加if (num==NaN) {num = 1; } 来设置参数的默认值。这样可以解决我目前手头代码的问题,但是却明显不是真正的解决方案。
所以,通过JS修改元素onclick动作的正确方式是什么呢?