2011-09-08 27 views
0

在我們的應用程序中,我們使用document.forms[0]從JavaScript訪問表單。這用於正常工作,直到我們必須在當前表單之前引入另一個表單(在頁面標題中)。很明顯,現在我們的表單提交都不會正常工作,因爲它會提取標題中指定的表單。更改html頁面中的表單順序

無論如何,我們可以通過document.forms [0]來引用現有的表單。

我們唯一的其他選擇是按名稱引用這兩個表單並在JavaScript中使用該名稱。但是,由於這構成了大量的返工,我只是想,如果社區可以拋出一個替代解決方案。

澄清:使用document.getElementById將是更好的解決方案,但是這是計劃在下一個主要版本中。我們會非常強調在當前的發佈週期中增加這些內容。

+0

難道人還硬編碼的碼? – doNotCheckMyBlog

+0

似乎是這樣。我們必須與我們擁有的一起生活。 :( –

+0

不能在document中運行'document.forms'替換全部'document.forms [0]''這應該是相對容易的。 – Ben

回答

2

您可以將位於頁面頂部的表單放在HTML底部,並使用一些花哨的CSS使其顯示在頁面頂部。或者,您可以使用一些Javascript在頁面加載後在頁面頂部定義表單,這(我認爲)會使原始表單顯示爲form [0],並且頂部表單顯示爲形式[1]。即使像body.onload這樣簡單的TopFormDiv.innerHTML ='你所有的表單html都在這裏'也許是足夠的,當然,你可以使這更復雜。

另外,你可以考慮「monkey patching」document.Forms對象,以便document.Forms [0]返回你想要的表單。我在想的是在頁面頂部有一些代碼將document.Forms [0]轉換爲您希望它表示的代碼,並將其他所有內容移動到一個位置。這必須在文檔加載完成後,但在頁面上的其他任何內容嘗試訪問表單之前完成。

UPDATE

一些初步測試後,似乎調用document.forms [0]實際上是通過當前的DOM搜索,直到它返回第一種形式。因此,即使您稍後在頁面加載後定義表單,正如我在第一段中所建議的那樣,它看起來並不像您期望的那樣工作。即使是「猴子修補」也不起作用,因爲將[0]設置爲某種其他形式的值似乎沒有完成任何事情,因爲形式[0]總是返回DOM樹中的第一個形式。所以,我可以看到完成這個的唯一方法是在HTML底部定義「頂部」表單,並使用CSS將其定位在文檔的頂部。有關如何將底部窗體放置在頁面頂部的基本示例,請參閱this example

+0

爲什麼不是document.getElementById()?大聲笑,我給一個錯誤的方式? – doNotCheckMyBlog

+0

這沒有錯,但(從我的理解)document.Forms [0]被引用到整個代碼中,並且將所有調用切換到document.Forms [0]到的document.getElementById。 – Kibbee

+0

是真的,但不會是一個更好的做法?我感到震驚的是,人們仍然使用像document.form [0]這樣沒有意義的東西。我不想繼續來回檢查我與lol互動的形式 – doNotCheckMyBlog