有个表单里同时存在action和onsubmit
<script type="text/javascript">
  function _sumbit(obj) {
    if(xxx) {
      ....
    } else {
      return false;
    }
  }
</script>
<form id="xx" action="<?php echo xxx.php ?>" onsubmit="return _sumbit(this)">
   xxx...
</form>
前天弄一个流程,发现流程执行了2次,实在想不同我哪里写错了,今天突然想到会不会是提交的时候本来就提交了2次,一搜索,结果发现有人说这2个东西同时存在会产生2次提交但是我的action提交的地址是会变化的哦,如果要改成用onsubmit提交的话,要怎么写呢??突然间脑袋卡住了..想不通...求解...

解决方案 »

  1.   

    你在_submit有没有执行obj.submit()?
      

  2.   

    onsubmit="_submit(this)"
    function _submit(obj) {
      if(xxx) {
        ...
        if(yyy) {
          obj.action = "<?php echo xxx.php ?>";
        } else {
          obj.action = "<?php echo yyy.php ?>"
        }
      } else {
        return false;
      }
    }
    这样可以吗??这样还会2次提交吗?
      

  3.   

    但是我现在有个怪问题就是...流程是一直线的,但是从日志(PHP中写入到文件)中看
    本来流程应该是函数1-->函数2-->函数3-->函数4.1-->函数4.2但在日志中既然能看到
    函数1-->函数2-->函数3-->函数4.1-->函数1-->函数2-->函数3-->函数4.1-->函数4.2-->函数4.2
    这样的流程...
    而且顺序还不一定
    有时候会变成函数1-->函数2-->函数1-->函数2-->函数3-->函数4.1-->函数3-->函数4.2-->函数4.1-->函数4.2而且流程就执行2次,不会多也不会少...
    如果是固定顺序的,那可能就是我流程哪里写错了,但是顺序不固定,看起来就想同时提交了2次,然后2个线程抢着占资源那样(不知道该怎么描述...)最重要的一点是...函数4.1后只可能顺序执行函数4.2,因为在代码中根本就没有调用到其他函数或是返回,但它确确实实从函数4.1跳到了其他函数...
      

  4.   

    经测试,的确...
    如果我在form中只写action
    <form action="<?php echo xxx.php ?>" >
    ...
    </form>
    这样的话,后台的流程就是按照我预定的
    函数1-->函数2-->函数3-->函数4.1-->函数4.2 
    这样来执行
    但是我把它修改成function _submit(obj) {
      xxx...
      obj.action = "<?php echo xxx.php ?>";
      obj.sumbit();
    }
    <form onsubmit="return _submit(this)" >
    ...
    </form>和
    function _submit(obj) {
      xxx....
      obj.sumbit();
    }
    <form action="<?php echo xxx.php ?>" onsubmit="return _submit(this)" >
    ...
    </form>
    改成这2种的话,就会出现我上面说的流程执行2遍...
    但是...我该怎么提交表单呢??action可能会改变,而且必须在提交前处理一些数据...
      

  5.   

    PHP用的是5.3.1,线程安全版
    用的是CI 1.7.2的框架
    后台我没用线程,但是CI里面有没有我就不知道了...
      

  6.   

    会提交2次,我是在这里看到的
    http://topic.csdn.net/t/20021202/10/1222323.html#
    里面也是action和onsubmit同时存在导致2次提交,二楼说action提交一次,onsubmit也提交一次..
      

  7.   

    现在就只能保留action
    然后用按键监听事件来处理我的流程了...
    我要弄的就是在input框里获取条形码的内容
    条形码扫描仪都会在后面添加一个回车,我是监听到了
    但是要怎么让它只监听指定input框里的回车事件呢??
    我是想用onblur事件,判断失去焦点时是不是因为回车才失去焦点的,如果是的话就提交数据
    不知道这样可行否??
      

  8.   

    不是action的问题,是你的onsubmit里调用了submit()方法
    把这个去掉,return true就可以
      

  9.   

    5555555555
    看得我简直内牛满面啊...
    经过修改,只保留action
    然后添加一个display:none的text框
    禁止页面响应回车提交表单
    然后在本来的input框添加键盘监听事件,如果是回车的话,则把表单提交...
    终于可以了...日志中终于按照我编写的流程来走了...
    内牛满面啊...整整弄了2天了...