2009-06-24 65 views
5

提交我有世界上最簡單的JavaScript功能:它是由被稱爲形式不是JS

fnSubmit() 
{ 
    window.print(); 
    document.formname.submit(); 
} 

<button type="button" id="submit" onclick="fnSubmit()">Submit</button> 

一切都很好,打印對話框中顯示出來,但是後打印或取消打印我得到以下錯誤:

「document.formname.submit is not a function」

我的形式定義如下:(顯然我不是在實際的代碼中使用表格名稱,但你的想法)

<form name="formname" id="formname" method="post" action="<?=$_SERVER['SCRIPT_NAME']?>"> 

很顯然,我不是想在這裏做什麼特別的事情,我已經使用在類似的方法過去,我在這裏失去了什麼?

+0

作爲一個變通我做了以下內容: 只是顯示打印按鈕,調用打印方法,一旦用戶已經做到了這一點,然後我告訴提交按鈕(<輸入類型=「提交」id =「btnSubmit」/>)及其所有的好。 – 2009-06-24 16:53:42

回答

27

簡而言之:將提交按鈕的ID更改爲與「submit」不同的內容。另外,請勿將名稱設置爲此值。

現在,更深入的瞭解。一般情況下,document.formname.submit是一種被調用時會提交表單的方法。但是,在您的示例中,document.formname.submit不再是一種方法,而是代表按鈕的DOM節點。

發生這種情況是因爲表單的元素可通過它們的nameid屬性作爲其DOM節點的屬性。這一措辭是有點混亂,所以這裏談到一個例子:

<form name="example" id="example" action="/"> 
    <input type="text" name="exampleField" /> 
    <button type="button" name="submit" onclick="document.example.submit(); return false;">Submit</button> 
</form> 

在這個例子中,document.forms.example.exampleField是代表名爲「exampleField」領域的DOM節點。您可以使用JS訪問其屬性,如其值:document.forms.example.exampleField.value

但是,在這個例子中有一個名爲「submit」的表單元素,這是提交按鈕,可以通過document.forms.example.submit進行訪問。這將覆蓋之前的值,這是允許您提交表單的函數。

編輯:

如果重命名字段是對你不好,還有另一種解決方案。不久寫這之前,我留在網站上的問題,並得到了在一個整潔的JavaScript形式的響應破解:

function hack() { 
    var form = document.createElement("form"); 
    var myForm = document.example; 
    form.submit.apply(myForm); 
} 

完整詳細信息,請參閱How to reliably submit an HTML form with JavaScript?表單內

5

試試這個:

fnSubmit() 
{ 
    window.print(); 
    document.getElementById("formname").submit(); 
} 
+0

我絕對知道這*應該*工作,但由於某種原因,它只是顯示打印對話框,並沒有去哪裏。 – 2009-06-24 16:22:27

+0

然後你的問題在你的代碼中的其他地方。很可能是一個永遠不會關閉的HTML標記。 – 2009-06-24 16:25:09

+0

不幸的是,它完全通過驗證,所以我不認爲這是一個標記問題? – 2009-06-24 16:35:55

6

鑑於您的形式同時具有id,並定義了name,你可以使用兩者之一:

隨着form標籤的id

document.getElementById('formname').submit(); 

隨着form標籤的name屬性:

document.forms['formname'].submit(); 
0

最有可能的罪魁禍首是IE混淆了JavaScript變量,ID和名稱。在源代碼中搜索與您的表單名稱相同的內容。

0
  1. 將一個輸入按鈕。
  2. 給它tabindex =「 - 1」。
  3. 使用style =「display:none;」使其不可見。

喜歡這個

<input type="submit" tabindex="-1" style="display:none;" />