2013-07-08 185 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*********