古早之前寫了一個做表單欄位檢核的JS檔,裡面的第一項工作是先取得Form物件,指定給區域變數:

var defaultFormName = "Form1";
var theForm = document.forms[defaultFormName];

因為VS.NET 2003所建立的ASPX,裡面只會有一個HTML Form,名稱一律預設為Form1,在大部分的情形下,這段Code跟ASPX結合得很好。

後來手上的專案開發多半是將原有ASP.NET 1.1直接升級成ASP.NET 2.0繼續發展,用起來也一直相安無事,直到有同事建了ASP.NET 2.0的新專案,引用這個JS時卻冒出了找不到物件的Error。細究之下,發現了一個天大的祕密...

VS.NET 2003 新增ASPX的表單名稱為Form1
VS 2005新增ASPX的表單名稱為form1

雖然這個不知意義為何的改革讓人很無奈,幸好改起來不算麻煩,如下:

var defaultFormName = "form1";
if (!document.forms[defaultFormName]) defaultFormName="Form1";
var theForm = document.forms[defaultFormName];

PS: form1改在Form1前面是因應未來form1出現的比例會愈來愈高。

Update @ 2007-10-26
剛才又發現一個祕密,document.all("form1")不分大小寫,不論Form1, form1都可以被找到(注意: all()是IE Only),而document.forms[]則遵循Javascript的傳統,會區分大小寫。


Comments

# by rachen

好奇的問一下,如果用.. var theForm = document.forms[0]; 不是就不用管表單名稱了..

# by Jeffrey

To rachen, 你說得沒錯,在只有單一HTML Form的環境裡,這應該是更省事的做法。 這個JS是從ASP時代就傳下來的,當初曾應用在一些比較複雜多HTML Form的網頁中,保留了用FormName指定表單的彈性做法(在文章中那一段被我省略掉了),所以變成這副德行。如果就事論事,在只配合ASPX 使用的前題下,改寫成你說的做法,的確更有效率。

Post a comment


86 - 63 =