2014-04-04 62 views
0

代碼Form.submit沒有在Javascript

HTML發現

<form id="myFrm" name="myFrm" action="/myApp/ProcessFrm" method="post"> 
    <input autofocus="autofocus" type="text" id="Location" name="Location" onkeydown="changetotab()" style="width: 4em" tabindex="1" /> 
    <input type="Submit" value="Submit" id="submit" /> <br /> 
</form> 

JS

function changetotab() { 
      var charCode = (window.event.which) ? window.event.which : window.event.keyCode; 

      if (charCode == 13 || charCode == 9) { 
       if (document.myFrm.submit == undefined) { 
        alert("form submit can't be found") 
       } else { 
        alert("form can be submitted"); 
        document.myFrm.submit(); 
       } 
      } 
     } 

什麼情況是,當用戶按下TAB或ENTER,document.myFrm.submit = =未定義出現錯誤(迄今爲止這麼好);然後奇怪的事情發生 - 當我到了document.myFrm.submit(); JS通知沒有找到這個方法。

0x80020003 - JavaScript runtime error: Member not found.

這裏發生了什麼事?

注意:我不能使用Jquery,以防萬一您想知道我爲什麼使用舊式JS。這將運行在不支持Jquery的舊設備上。

+0

你嘗試的document.getElementById(「myFrm」),而不是document.myFrm? –

+0

或document.forms [「myFrm」] –

+0

剛剛嘗試過兩種方法 - 都無效。試着不要把我的頭髮撕掉。讓我重新啓動我的Visual Studio。 – sarsnake

回答

5

this JSfiddle。這裏發生了什麼?那麼,在DOM前的時間,上的JavaScript input的父form創建一個屬性foo每個input與名foo

form.foo.toString() === "HTMLInputElement"; 

然而,這意味着,如果你有名稱的輸入元素submit,表單自己的submit方法被覆蓋。這種行爲直到今天仍然存在。

現在,您的輸入沒有name屬性。在這種情況下,行爲是從input的ID中推導出一個,如果有的話。所以基本上,改變input的ID,這是對付它的最直接的方式:

<input type="Submit" value="Submit" id="submit_" /> 

有很多這樣的細微之處,很遺憾。請參閱DOMLint以獲得良好的概述。

編輯:怎麼辦,如果你結束了一個慘敗submit方法,沒有辦法改變HTML?然後取出從形式的原型提交方法和使用:

// form.submit() doesn't work, but this will: 
HTMLFormElement.prototype.submit.call(form); 
+0

啊..我錯過了那個... –

+0

是的。這是微妙的,甚至有經驗的開發人員經常下降。 – Boldewyn

+0

它從來沒有咬過我,但我有這個'不使用已經採取的名字'的規則類型銘刻在我的頭上。我把這些東西當作關鍵詞來對待,並讓它們獨處。 –

0

試試這個(普通的JavaScript):

document.getElementById('myFrm') 
+0

已經嘗試過 - 沒有去過 – sarsnake