一个页面有很多button,每个button的onclick事件都对应不同的响应函数,代码如下:<input type="button" onclick = "f1()">
<input type="button" onclick = "f2()">
<input type="button" onclick = "f3()">现需要在执行所有的onclick函数前,都执行一段校验权限的逻辑。简单的办法是,直接把校验权限的代码加到所有的函数前,如下:Function f1(){
If(校验通过){
    //执行原有的业务逻辑
}else {
  alert(您没有权限!);
 Return false;
}
}但问题是,由于button很多所以要改很多代码,且代码不易扩展。想请教大家,有没有更好的方法,能实现需求,且代码可扩展和免于改变?javascript事件

解决方案 »

  1.   


    <script type="text/javascript">
    function f1(){
    alert(1);
    }
    function f2(){
    alert(2);
    }
    function f3(){
    alert(3);
    }
    window.onload = function(){
    var _buttons = document.getElementsByTagName('input');
    for(var i = 0 ; i < _buttons.length ; ++i){
    if(_buttons[i].type=='button'){
    (function(_i){
    var fn = _buttons[_i].onclick;
    if(fn){
    _buttons[_i].onclick = function(){
    alert('第'+(_i+1)+'个click之前调用的函数');
    fn();
    }
    }
    })(i);

    }
    }
    }
    </script>
    <input type="button" onclick = "f1()">
    <input type="button" onclick = "f2()">
    <input type="button" onclick = "f3()">
    LZ试下这个,在window.onload里面加
      

  2.   

    实际你只需要在表单提交前校验就行了,没必要每个按钮点击都去校验
    给表单写onsubmit事件就行了
      

  3.   

    把你的校验规则用自定义属性写到对应的input里
    写一个校验的函数
    点击按钮后函数去获取校验规则校验试试
      

  4.   

    但是还有两类情况,是没法做到的。1.onclick的内容是ajax请求 2.onclick的内容是本地操作,比如打开文件
      

  5.   

    那实际你只需要在页面加载时验证权限,没有权限的按钮disabled就行了
      

  6.   

    直接在你要校验的按钮里加个校验函数kkk(),返回值为false则不执行f1()
    <input type="button" onclick = "if(kkk()){f1()}">
      

  7.   

    实际上我要实现的功能不是校验权限,不过也差不多,是校验session是否过期,为了描述方便,我就简单的说了是校验权限。
      

  8.   

    那是不是每个onclick函数都要修改,这样不太好吧
      

  9.   

    这样就违反我的初衷了,html代码没有js业务代码相分离,而且改动很多且不易扩展。
      

  10.   

    校验session是否过期,在struts2中可用action拦截器来做。
      

  11.   

    实际上我要实现的功能不是校验权限,不过也差不多,是校验session是否过期,为了描述方便,我就简单的说了是校验权限。
      

  12.   

    不是打开页面前判断,是打开页面后,过了30分钟后再来点按钮。
    这里又分三种情况:
    1.post请求,这个可以按你的方法做
    2.ajax请求
    3.本地操作,比如打开文件(如果session过期不允许打开本地文件)后两种情况需要在前台点击按钮前进行判断。
      

  13.   

    ajax请求也要进入到某个action执行操作吧
      

  14.   

    1#已经帮你弄好了,保存原来的onclick事件,然后赋予button新的onclick事件