雖然一直沒怎麼用過html控制項textarea,但是根據自己一貫的作風,樓豬大膽認為textarea和伺服器控制項TextBox的TextMode為MultiLine的文字框在最終產生的html標籤上應該是一樣的。也許是先入為主吧,在上周的一個設計頁面中,樓豬毫不思索地寫下了下面的html代碼:
<textarea id="txtTest1" value="123" cols="20" rows="2"></textarea>
然後,vs有一個提示:訊息 1 驗證 (XHTML 1.0 Transitional): 屬性“value”不是元素“textarea”的有效屬性。
暈,textare難道竟然沒有value屬性?然後樓豬又嘗試將textarea放在服務端:
<textarea id="txtTest1" cols="20" rows="2" enableviewstate="false" runat="server"></textarea>
然後,在cs檔案下,可以寫如下代碼:
this.txtTest1.Value = "123";
這說明服務端的Value屬性是存在的,樓豬又查了一下Value屬性中繼資料說明:擷取或設定在 System.Web.UI.HtmlControls.HtmlTextArea 控制項中輸入的文本。再查看一下產生的html源碼:
<textarea name="txtTest1" id="txtTest1" cols="20" rows="2">123</textarea>
現在一目瞭然。原來textarea的“value”值在textarea開始和結束標籤內,而不是像type為text的input,看起來是將value放在value屬性上。然後樓豬又用伺服器控制項TextBox和runat為server的textarea又進行了一下對比:
代碼
<asp:TextBox ID="txtTest" TextMode="MultiLine" EnableViewState="false" runat="server"></asp:TextBox>
<textarea id="txtTest1" cols="20" rows="2" enableviewstate="false" runat="server"></textarea>
cs下寫下如下代碼:
this.txtTest.Text = "123";
this.txtTest1.Value = "123";
它們產生的html也是一樣的:
<textarea name="txtTest" rows="2" cols="20" id="txtTest">123</textarea>
<textarea name="txtTest1" id="txtTest1" cols="20" rows="2">123</textarea>
而對於TextBox而言,它又是可以直接在標籤上寫Text屬性的,而runat="server"的textarea卻不可以直接在標籤內寫Value屬性:
<asp:TextBox ID="txtTest" TextMode="MultiLine" Text="123" EnableViewState="false" runat="server"></asp:TextBox>
然後,樓豬又通過javascript來擷取它們的value:
var txtValue=document.getElementById("txtTest").value;
alert(txtValue);
var txtValue1=document.getElementById("txtTest1").value;
alert(txtValue1);
kao,這一次它們又都彈出了值123!這就說明textarea是有value屬性的(換成innerText屬性也一樣)。真的徹底服了。最後樓豬為了保險起見,將textarea換成了自己一直使用習慣的沒有檢視狀態的TextBox,因為現在不熟悉也吃不透這個textarea還有哪些古怪的設計。期待指點。