2013-07-08 62 views
0

我有这种形式,用户从下拉菜单中选择选项,并显示相应的div。然而,我的问题是点击提交按钮时,点击方法正在成功执行,但当前div被隐藏,并显示第一个div。我怎样才能阻止这种情况发生?按钮点击jQuery重置

jQuery代码:

$(document).ready(function() { 
     displayDiv(); 
     $('#ddlist').change(displayDiv); 

     function displayDiv() { 
      switch ($("#ddlist").val()) { 
       case "addition": 
        $("#addition").show(); 
        $('#conversion').hide(); 
        $('#triangle').hide(); 
        $('#quadratic').hide(); 
        break; 
       case "conversion": 
        $("#addition").hide(); 
        $('#conversion').show(); 
        $('#triangle').hide(); 
        $('#quadratic').hide(); 
        break; 
       case "triangle": 
        $("#addition").hide(); 
        $('#conversion').hide(); 
        $('#triangle').show(); 
        $('#quadratic').hide(); 
        break; 
       case "quadratic": 
        $("#addition").hide(); 
        $('#conversion').hide(); 
        $('#triangle').hide(); 
        $('#quadratic').show(); 
        break; 
      } 
     } 
    }); 

表单代码:

Please choose required calculation from the following list: 
    <select id="ddlist"> 
     <option value="addition">Addition of three numbers</option> 
     <option value="conversion">Convert from Fahrenheit to Celsius</option> 
     <option value="triangle">Calculate the side of a right-angled triangle</option> 
     <option value="quadratic">Find x using the Quadratic Equation</option> 
    </select><br /><br /> 
</p> 

<div id="addition"> 
    <p> 
    Input variable a : <asp:TextBox runat="server" ID="varA" CssClass="numeric"></asp:TextBox><br /><br /> 
    Input variable c : <asp:TextBox runat="server" ID="varB" CssClass="numeric"></asp:TextBox><br /><br /> 
    Input variable b : <asp:TextBox runat="server" ID="varC" CssClass="numeric"></asp:TextBox><br /><br /> 
    <asp:Button ID="additionSubmit" runat="server" Text="Submit" 
      onclick="additionSubmit_Click" /><br /><br /> 
    <asp:Label ID="lblAddition" runat="server" Text="" CssClass="label"></asp:Label> 
    </p> 
</div> 

<div id="conversion"> 
    <p> 
    Input Fahrenheit Temperature : <asp:TextBox runat="server" ID="temperatureF" CssClass="numeric"></asp:TextBox><br /><br /> 
    <asp:Button ID="converstionSubmit" runat="server" Text="Submit" 
      onclick="converstionSubmit_Click" /><br /><br /> 
    <asp:Label ID="lblConversion" runat="server" Text="" CssClass="label"></asp:Label> 
    </p> 
</div> 

<div id="triangle"> 
    <p> 
    Input side a : <asp:TextBox runat="server" ID="tsideA" CssClass="numeric"></asp:TextBox><br /><br /> 
    Input side b : <asp:TextBox runat="server" ID="tsideB" CssClass="numeric"></asp:TextBox><br /><br /> 
    <asp:Button ID="triangleSubmit" runat="server" Text="Submit" 
      onclick="triangleSubmit_Click" /><br /><br /> 
    <asp:Label ID="lblTriangle" runat="server" Text="" CssClass="label"></asp:Label> 
    </p> 
</div> 

<div id="quadratic"> 
    <p> 
    Input side a : <asp:TextBox runat="server" ID="sideA" CssClass="numeric"></asp:TextBox><br /><br /> 
    Input side c : <asp:TextBox runat="server" ID="sideB" CssClass="numeric"></asp:TextBox><br /><br /> 
    Input side b : <asp:TextBox runat="server" ID="sideC" CssClass="numeric"></asp:TextBox><br /><br /> 
    <asp:Button ID="quadraticSubmit" runat="server" Text="Submit" 
      onclick="quadraticSubmit_Click" /><br /><br /> 
    <asp:Label ID="lblQuadratic" runat="server" Text="" CssClass="label"></asp:Label> 
    </p> 
</div> 

上单击代码(仅此外,剩下的就是类似):

protected void additionSubmit_Click(object sender, EventArgs e) 
    { 
     if (varA.Text != null && varB.Text != null && varC.Text != null) 
     { 
      int result = Convert.ToInt32(varA.Text) + Convert.ToInt32(varB.Text) + Convert.ToInt32(varC.Text); 
      lblAddition.Text = " a + b + c = " + result.ToString("#.##") + "\r (a+b+c)"; 
     } 
     else 
     { 
      lblAddition.Text = "Please input all fields!"; 
     } 
    } 

努力实现上述与AJAX 。这是我到现在为止:

$("#btnSubmit").click(function() { 

     $.ajax({ 
      $('#addition,#conversion,#triangle').hide(), 
      $('#quadratic').show(); 
     }); 
     }); 
+1

无关的,你问什么,我可以建议你'displayDiv()'函数可以减少到只有两行,如果你首先隐藏所有div $(“#addition,#conversion,#triangle,#quadratic”)。hide();'然后显示需要的$'(“#”+ $(“#ddlist”).val()).show();' – nnnnnn

+0

会改变这一点,感谢提示 – user1986761

回答

1

您在这里混合服务器端和客户端功能,所以结果可能会显得不直观。当您执行服务器端逻辑时,整个页面将被重新加载。因此,就客户端逻辑而言,您可以得到的是页面的全新上下文。因此,您对​​的初始呼叫显示/隐藏了div,就好像它是初始页面加载一样。

您有几种选择,每一个的适用性是由你和你舒服发展什么,或者你需要支持什么样的其他功能:

  • 显示/隐藏div从s服务器端代码,而不是客户端代码,所以你可以在服务器端事件处理程序中包含逻辑,以便在页面回传时处理;或
  • 在AJAX调用中执行服务器端逻辑,这样您就不会从回发中丢失客户端状态;或
  • 执行逻辑客户端。

第一种选择可能是你更舒服,但它要既包括执行多种后背上,以取代客户端的显示/隐藏逻辑(这是穷人UX),或者这将需要一些尴尬的代码在服务器端设置CSS属性并手动保持它们与客户端CSS属性保持同步。 (提示:你不能设置.Visible = false,因为那时元素根本不会呈现在客户端。)

第二个选项可能是你最好的学习体验。

如果您希望执行的其他逻辑也可以在客户端完成,那么第三个选项非常好。如果你只是在谈论数学方程,那么这可能是真的。这将导致最好的用户体验,因为没有等待任何功能的网络延迟。

+0

想试试和做AJAX,但我的经验与AJAX是非常小的。我如何在客户端执行数学逻辑? – user1986761

+0

@ user1986761:这个问题有一些有用的链接,用于在使用jQuery的WebForms应用程序中实现AJAX调用:http://stackoverflow.com/questions/202538/using-jquery-for-ajax-with-asp-net-webforms – David

+0

谢谢链接将检查出来。我如何在客户端执行数学逻辑? – user1986761

0

大卫是正确的,因为页面正在回传完全导致“displayDiv”每次都选择ddlist,选择'addition'项目。我们需要一些东西来保存服务器正在处理的ddl的值。请大家看看我已经实现解决您有问题的代码....

********************** Script Begin***************** 
$(document).ready(function() { 
      SetDdlListValue(); 
      $('#ddlist').change(displayDiv); 
      displayDiv(); 
     }); 

     function SetDdlListValue() { 
      var hidValue = $('#<%= hidListSelectedValue.ClientID %>').val(); 
      if (hidValue != '') { 
       $("#ddlist").val(hidValue); 
      } 
     } 

     function displayDiv() { 
      switch ($("#ddlist").val()) 
       { 
        case "addition": 
         $("#addition").show(); 
         $('#conversion').hide(); 
         $('#triangle').hide(); 
         $('#quadratic').hide(); 
         break; 
        case "conversion": 
         $("#addition").hide(); 
         $('#conversion').show(); 
         $('#triangle').hide(); 
         $('#quadratic').hide(); 
         break; 
        case "triangle": 
         $("#addition").hide(); 
         $('#conversion').hide(); 
         $('#triangle').show(); 
         $('#quadratic').hide(); 
         break; 
        case "quadratic": 
         $("#addition").hide(); 
         $('#conversion').hide(); 
         $('#triangle').hide(); 
         $('#quadratic').show(); 
         break; 
       } 

      } 
********************** Script End ***************** 

**********************Add hidden control at aspx***** 

<asp:HiddenField ID="hidListSelectedValue" runat="server" /> 

***************************************************** 

********************** .cs page code Begin********* 

string[] ddlListValues = new string[] { "addition", "conversion", "triangle", "quadratic" }; 

     protected void Page_Load(object sender, EventArgs e) 
     { 
     } 

     protected void additionSubmit_Click(object sender, EventArgs e) 
     { 
      if (varA.Text != null && varB.Text != null && varC.Text != null) 
      { 
       int result = Convert.ToInt32(varA.Text) + Convert.ToInt32(varB.Text) + Convert.ToInt32(varC.Text); 
       lblAddition.Text = " a + b + c = " + result.ToString("#.##") + "\r (a+b+c)"; 
       hidListSelectedValue.Value = ddlListValues[0]; 
      } 
      else 
      { 
       lblAddition.Text = "Please input all fields!"; 
      } 
     } 

     protected void converstionSubmit_Click(object sender, EventArgs e) 
     { 
      hidListSelectedValue.Value = ddlListValues[1]; 
     } 

     protected void triangleSubmit_Click(object sender, EventArgs e) 
     { 
      hidListSelectedValue.Value = ddlListValues[2]; 
     } 

     protected void quadraticSubmit_Click(object sender, EventArgs e) 
     { 
      hidListSelectedValue.Value = ddlListValues[3]; 
     } 

********************** .cs page code End*********