通过JS修改元素onclick动作的正确方式?

/ 0评 / 0

一般来说,通过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动作的正确方式是什么呢?

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注