无法隐藏<span>文本</span>

时间:2012-09-28 17:49:26

标签: c# javascript asp.net sql

aspx页面

<asp:UpdatePanel ID="asypnl" runat="server">
   <ContentTemplate>
      <asp:Wizard />
      <StartNavigationTemplate>
      </StartNavigationTemplate>
      <FinishNavigationTemplate>
      </FinishNavigationTemplate>
      <WizardSteps>
         <asp:WizardStep ID="WizardStep1" runat="server">
            <asp:Panel runat="server" ID="pnlGiftInfo">
               <td>
                  <asp:DropDownList ID="DropDownPayment" runat="server">
                     <asp:ListItem Selected="True" Value="0">Gift</asp:ListItem>
                     <asp:ListItem Value="1">Pledge</asp:ListItem>
                  </asp:DropDownList>
               </td>
            </asp:Panel>
         </asp:WizardStep>
      </WizardSteps>
      <asp:Panel runat="server" ID="pnlOutput">
         <%-- Content comes from the database OutputHtml Colunm--%>
      </asp:Panel>
   </ContentTemplate>
</asp:UpdatePanel>

数据库专栏

<p>Thank you for your <span id "ddlGift">gift</span><span id "ddlPayment">payment</span> of
    {Amount} to the {Comm}
<script type="text/javascript" language="javascript">
        var p = document.getElementById("DropDownPayment");
        var eledropdownPayment = p.options[p.selectedIndex].value;
        var ddlGift = document.getElementById("ddlGift");
        var ddlPayment = document.getElementById("ddlPayment");
        if (eledropdownPayment == "0") {
            ddlGift.style.display = "block";
            ddlPayment.style.display = "none";
        } else {
            ddlGift.style.display = "none";
            ddlPayment.style.display = "block";
        }
</script>

在向导ctrl中提交最后一步后,我将使用数据库内部构建的Html标记结构显示结果。一切都工作正常,除了数据库中的脚本没有执行,所以我可以看到两个跨文本。 我只想根据下拉选择选择范围。 我无法在aspx中编写脚本,因为这些span标记在页面加载事件中不存在,它们在向导ctrl中完成2个步骤后进入输出面板。 我需要一些方法来根据下拉选择显示sapn ... 谢谢。对不起长描述。

3 个答案:

答案 0 :(得分:1)

最简单的解决方案是将两个span id放在设计时间中,而不是从db中获取包含span标签的全文。从db中提取其他文本以及金额和其他详细信息,并将其放置在适当的位置。

将其置于设计时间 谢谢你的礼物付款

来自db, {Amount}到{Comm}

现在,您可以在javascript中控制span,并且可以相应地使跨度可见/不可见。

答案 1 :(得分:0)

如果我理解正确,你的html + javascript来自数据库通过ajax,在这种情况下你可能需要延迟一点javascript的执行以给浏览器加载html内容到DOM的时间,你可以做它将您的javascript代码包含在setTimeout()调用中,如下所示:

            setTimeout(function() {
                var p = document.getElementById("DropDownPayment");              
                var eledropdownPayment = p.options[p.selectedIndex].value;              
                var ddlGift = document.getElementById("Gift");              
                var ddlPayment = document.getElementById("ddlSelectionPledge");              
                    if (eledropdownPayment == "0") 
                    {                  
                    ddlGift.style.display = "block";                  
                    ddlPayment.style.display = "none";              
                    } 
                    else 
                    {                  
                    ddlGift.style.display = "none";                  
                    ddlPayment.style.display = "block";              
                    }
             }, 300); //delay execution by 300 miliseconds

答案 2 :(得分:0)

要执行脚本,您必须做的不仅仅是在页面中间添加这些脚本标记。最简单的选择是使用RegisterClientScriptBlock方法。在服务器端,您需要调用该方法并将脚本作为第二个参数传递。

另一种选择是在你的javascript中实际包含一个函数。设置元素内容后,调用该函数。重点是代码不会自动执行。