2009-11-30 122 views
1

我的javascript代碼修改了一些屬性,包括可見性。回傳後,一些屬性卡住了,其他屬性被「遺忘」了。在這裏,我嘗試將文本框的Text屬性和標籤的可見性屬性更改爲「隱藏」。回發後,文本被保留,但顯示標籤。我非常希望在回發後保持標籤隱藏。 'display'CSS屬性也會發生同樣的情況。或者,如果我試圖隱藏<div>。任何幫助將非常感激:由JavaScript修改的控件的可見性屬性在回發後被忽略

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ShowHide.aspx.cs" Inherits="WebApplication1.ShowHide" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title>Untitled Page</title> 
    <script type="text/javascript" language="javascript"> 
     function ShowHide() 
     { 
      debugger; 
      var txt = document.getElementById('txtNumber'); 
      txt.value='4'; 
      var lbl = document.getElementById('lblShowHide'); 
      if(lbl.style.visibility == 'hidden') 
      { 
       lbl.style.visibility = ''; 
      } 
      else 
      { 
       lbl.style.visibility = 'hidden'; 
      } 
     } 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Label ID="lblNumber" runat="server" Text="Enter Number" /> 
     <asp:TextBox ID="txtNumber" runat="server" Text="5" /> 
     <asp:Label ID="lblShowHide" runat="server" Text="Show" /> 
     <input id="btnChangeByJS" type="button" value="HTML Change by JavaScript" onclick="ShowHide();" /> 
     <asp:Button ID="cmdSubmit" runat="server" Text="ASP Submit" /> 
     <asp:HiddenField ID="hfShowHide" runat="server" /> 
    </div> 
    </form> 
</body> 
</html> 

謝謝!

回答

3

回傳是說html格式提交的另一種方式。當您提交表單時,只有發送給服務器的東西是inputselect元素的valuename屬性的形式。這就是爲什麼你的「文本」被保留下來的原因:它是該元素的value屬性。如果您還想保留可見性更改或任何其他更改,則需要向表單中添加一個元素,該元素可以以某種方式在其值屬性中保存這些更改。

這基本上就是ViewState的功能;一個額外的隱藏元素,其值屬性保存控件的當前狀態。但ViewState用於維護頁面的服務器實例之間的狀態。這不是將新的更改從客戶端移動到服務器。

+0

謝謝你!不過,我的場景比我的例子要複雜得多。這發生在SharePoint站點的用戶控件中。這是有道理的,你說的,雖然我想確保我沒有忘記設置財產或什麼的。 – PricklyMaster 2009-11-30 20:33:21

0

鉤住客戶端pageLoad事件並隱藏文本框。例如:

function pageLoad() { 
     var txt = document.getElementById('txtNumber'); 
     txt.value='4'; 
     var lbl = document.getElementById('lblShowHide'); 
     if(lbl.style.visibility == 'hidden') 
     { 
      lbl.style.visibility = ''; 
     } 
     else 
     { 
      lbl.style.visibility = 'hidden'; 
     } 
}