form.submit() 不能提交表單的原因


公司項目做的排序功能,每次修改列表上的某條記錄的排序號,自動提交表單。

具體代碼如下:

<input type="text" value="<?php echo $v['charge_order'];?>" onblur="this.form.action='?moduleid=<?php echo $moduleid;?>&file=<?php echo $file;?>&action=charge_order&itemid=<?php echo $v['itemid'];?>&charge_order='+this.value;this.form.submit();" style="width: 2rem;"/>

在修改了 in­put text 值后,自動拼接當前的值,並提交表單,其中主要參數都通過 ac­tion 以 GET 方式傳遞到后台。

當時做的時候沒有 bug,提交正常。但是在其他某個頁面這樣添加時,表單未提交,請求未發送。

一開始以為是 this 的問題, var that = this ,沒有作用。后面輸出 form ,也未發現問題。最終聚焦在最后一句 this.form.submit();, 沒有像預期的那樣,提交表單。

反反復復地琢磨,都找不到原因。只好求助度娘。

找到了以下兩個可能的原因:

  • 表單中存在 name 屬性值為 submit 的項
  • 提交按鈕的 id 值為 submit

經過測試,當存在 name='submit' 的項時,使用 form.sub­mit () 方法會報錯,因為會混淆,然后取到 name='submit' 的項的值;當提交按鈕 id='submit' 時(其他項其實也是一樣),同樣會報錯,提示 Uncaught TypeError: this.form.submit is not a function 。

總結:表單中不能存在 name 或者 id 屬性值為 submit 的項,否則表單將提交失敗!

因為是在 in­put text blur 回調中執行的,未發現有 id 為 sub­mit 的按鈕或者其他項,排除。但找到了 name 為 sub­mit 的項,是一個提交按鈕,type = 'submit' name = 'submit'

去除 name 屬性,再次修改 text 值,ok!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM