公司項目做的排序功能,每次修改列表上的某條記錄的排序號,自動提交表單。
具體代碼如下:
<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;"/>
在修改了 input text 值后,自動拼接當前的值,並提交表單,其中主要參數都通過 action 以 GET 方式傳遞到后台。
當時做的時候沒有 bug,提交正常。但是在其他某個頁面這樣添加時,表單未提交,請求未發送。
一開始以為是 this 的問題, var that = this
,沒有作用。后面輸出 form ,也未發現問題。最終聚焦在最后一句 this.form.submit();
, 沒有像預期的那樣,提交表單。
反反復復地琢磨,都找不到原因。只好求助度娘。
找到了以下兩個可能的原因:
- 表單中存在 name 屬性值為 submit 的項
- 提交按鈕的 id 值為 submit
經過測試,當存在 name='submit'
的項時,使用 form.submit () 方法會報錯,因為會混淆,然后取到 name='submit'
的項的值;當提交按鈕 id='submit'
時(其他項其實也是一樣),同樣會報錯,提示 Uncaught TypeError: this.form.submit is not a function
。
總結:表單中不能存在 name 或者 id 屬性值為 submit 的項,否則表單將提交失敗!
因為是在 input text blur 回調中執行的,未發現有 id 為 submit 的按鈕或者其他項,排除。但找到了 name 為 submit 的項,是一個提交按鈕,type = 'submit' name = 'submit'
。
去除 name 屬性,再次修改 text 值,ok!