网站建设中如何防止表单重复提交?
来源:  关键字: 日期:2011-07-19 [关闭]

    网站建设中做添加信息页面的时候经常会遇到这样的问题,用户有时候会重复的点击提交按钮,会导致多次提交,产生重复数据,我们总是要写一段代码要在表单提交后把提交按钮设置disibled=true,这样的代码写了好几处。 

    初步想法是通过attachEvent 在form的onsubmit事件中挂一个方法,每次触发该事件的时候都调用我们定义的方法,我们可以给form增加一个submited属性,每次判断这个属性,为false的时候继续提交表单并且设置form.submited=true,反之说明表单已经提交,就不再表单。

    接下来,遇到了一些麻烦: 
    提交表单一般有三种方式
    <form action=test.aspx onsubmit="return false;" name=form1>
    1.<input type=submit >submit按钮
    2.<input type=text>当form中只有一个文本本框按回车的时候
    3.<input type=button onclick=javascript:form1.submit()>自己写脚本提交
    </form>
    前两种是可以触发 onsubmit事件的,但是第三种不会。

    显然,仅仅捕获onsubmit事件是不行的,还必须在form的submit方法执行前,判断表单是否在提交。
    看看下面的代码,我们就明白了。

    //修改当前页面所有表单的提交事件
    function $setFormCheckSubmited()
      {
        var frms=document.forms;
        for(var i=0;i<document.forms.length;i++)
        {
            frms[i].baseSubmit = frms[i].submit;//保存表单原来的submit 方法
            frms[i].submited = false;//添加一个submited属性,并且设置其为false
            frms[i].submit = new Function("$submitForm(this)");//
            $addElementEventHandler(frms[i],"onsubmit","$submitForm(document.forms["+i+"])");
        }
    }
   
    //提交一个表单,如果当前表单已经提交,按么就不会继续提交该表单
    function $submitForm(frm)
    {
        if (frm.submited) return false;
        frm.submited=true;
        frm.baseSubmit();
    }
 
 
    //下面是addElementEventHandler的实现
 
    /*
        添加一个方法到一个对象的一个的一个事件中
        element 要设置的对象 
        eventName 事件名称, 字符串类型的。
        methodName表示函数名称,字符串类型的。
    */
    function $addElementEventHandler(element,eventName,methodName)
    {
     if (document.all)
     {
            element.attachEvent(eventName,new Function(methodName));
     }
     else
     {
            if (eventName.substring(0,2)=="on") eventName=eventName.substring(2);//firefox中所有的事件名称前面是没有on的。
            element.addEventListener(eventName,new Function(methodName));
     }
    }

上一篇:网站制作中ASP动态页面生成伪静态的简单方法 下一篇:怎样避免网站出现二八定律?