2010-11-03 57 views
1

我正在使用detailsview来显示数据库中的记录进行编辑 - 或插入新记录。当用户更改其中一个字段的复选框时,我想隐藏另一个字段。为了避免不必要的回传,我想使用JavaScript。这里是我到目前为止的简化版本:和隐藏详细信息视图字段与javascript

<script type="text/javascript"> 
    function HideShowPromo(chk) { 
     if (chk.checked == true) 
      //.style.display = 'block'; 
     else 
      //.style.display = 'none'; 
    } 
</script> 

<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="false"> 
    <Fields> 
     <asp:TemplateField HeaderText="Use Promotional Code:"> 
      <InsertItemTemplate> 
       <asp:CheckBox ID="cbUsePromo" runat="server" /> 
      </InsertItemTemplate> 
      <EditItemTemplate> 
       <asp:CheckBox ID="cbUsePromo" runat="server" Checked='<%# Bind("_usePromo") %>' /> 
      </EditItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Promotional Code:"> 
      <InsertItemTemplate> 
       <asp:TextBox ID="txtPromoCode" runat="server" MaxLength="10"></asp:TextBox> 
      </InsertItemTemplate> 
      <EditItemTemplate> 
       <asp:TextBox ID="txtPromoCode" runat="server" Text='<%# Bind("_promo") %>' MaxLength="10"></asp:TextBox> 
      </EditItemTemplate> 
     </asp:TemplateField> 
    </Fields> 
</asp:DetailsView>  

后面的代码:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     DetailsView1.DefaultMode = DetailsViewMode.Insert;    
     ((CheckBox)DetailsView1.FindControl("cbUsePromo")).Attributes.Add("onclick", "HideShowPromo(this)"); 
    } 
} 

我已经能够选择“txtPromoCode”文本框和隐藏它,但它留下的标题文本。我想隐藏整个领域。

回答

1

你应该尽量隐藏整行,所以如果生成的HTML像:

<tr> 
    <td>Header</td> 
    <td><input id='txtPromoCode' /></td> 
</tr> 

使用javascript选择txtPromoCode和隐藏txtPromoCode.parentNode.parentNode(第一个父是<td>,第二个是<tr>

+0

完美的工作! – JumpingJezza 2010-11-03 09:09:46

相关问题