2014-10-31 74 views
0

我試圖確保用戶必須從下拉框中選擇一些內容,以便我使用JavaScript來檢查他們是否從下拉框中選擇了某些內容數據被寫入數據庫。我在DetailView中有一個按鈕,我無法在這裏訪問按鈕ID。如果用戶沒有從下拉列表中選擇任何內容,我希望用戶在點擊插入按鈕時發出警告。在下拉菜單的選擇不應該是這個「 - 選擇公制名稱 - 」強制用戶從下拉框中進行選擇

<asp:DetailsView ID="DV_InputForm" runat="server" Height="69px" Width="763px" AutoGenerateRows="False" 
       CellPadding="3" BorderColor="#DEBA84" BorderStyle="None" BorderWidth="1px" OnItemInserting="DV_InputForm_ItemInserting" 
       OnModeChanging="DV_InputForm_ModeChanging" BackColor="#DEBA84" DefaultMode="Insert" 
       CellSpacing="2" Style="margin-top: 0px"> 

       <Fields> 
        <asp:TemplateField HeaderText="Metric Name:"> 
         <ItemTemplate> 
          <asp:Label ID="lblMetricName" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.MetricName") %>'></asp:Label> 
         </ItemTemplate> 
         <EditItemTemplate> 

          <asp:DropDownList ID="ddl_NewMetricName" DataTextField="NAME" DataValueField="NAME" 
           runat="server" AutoPostBack="false" Width="400" Height="25" AppendDataBoundItems="true" 
           DataSourceID="DD_METRIC_DS"> 
           <asp:ListItem Text="--Select Metric Name--" Value="--Select Metric Name"></asp:ListItem> 
          </asp:DropDownList> 

         </EditItemTemplate> 
        </asp:TemplateField> 

        <asp:TemplateField ShowHeader="False"> 
         <ItemTemplate> 
          <asp:Button ID="btnNew" runat="server" CausesValidation="False" CommandName="New" 
           Text="Create New Server Monitoring" Font-Bold="True" BorderColor="#003366" BorderStyle="Groove" 
           Height="30px" /> 
         </ItemTemplate> 
         <InsertItemTemplate> 
          <asp:Button ID="Button1" runat="server" CausesValidation="True" CommandName="Insert" OnClientClick="return validate();" 
           Text="Insert" /> 
          &nbsp;<asp:Button ID="Button2" runat="server" CausesValidation="False" CommandName="Cancel" 
           Text="Cancel" /> 
         </InsertItemTemplate> 
        </asp:TemplateField> 
       </Fields> 
       <HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" /> 
       <EditRowStyle BackColor="#FFFFCC" Font-Bold="True" ForeColor="#003366" /> 

這裏是我的javascript:

<script type="text/javascript"> 
     function validate() { 
      var flag = true; 
      var dropdowns = new Array(); //Create array to hold all the dropdown lists. 
      var gridview = document.getElementById('<%=DV_InputForm.ClientID%>'); //GridView1 is the id of ur gridview. 
      dropdowns = gridview.getElementsByTagName('Select'); //Get all dropdown lists contained in GridView1. 
      for (var i = 0; i < dropdowns.length; i++) { 
       if (dropdowns.item(i).value == 'Select') //If dropdown has no selected value 
       { 
        flag = false; 
        break; //break the loop as there is no need to check further. 
       } 
      } 
      if (!flag) { 
       alert('Please make selection from the drop-down and click the insert button again. Thanks'); 
       document.getElementById('<%=Button1.ClientID%>').style.visibility = 'hidden'; 
      } 
      return flag; 
     } 
</script> 

        <RowStyle BackColor="#CCCCCC" ForeColor="#8C4510" /> 
       </asp:DetailsView> 

我不能夠因爲它現在編譯不是這樣的:<%=Button1.ClientID%>,我得到Button1下的紅線。這似乎是我訪問DetailView中Button1的方式是錯誤的。 <%=Button1.ClientID%>

+0

你可以更新你的問題,並解釋當他們點擊「插入」按鈕時發生了什麼? – jeuton 2014-10-31 16:25:16

回答

0

您需要在嘗試訪問它的屬性之前找到該按鈕,因爲它在您的詳細視圖中。

事情是這樣的:

<%=((Button)DV_InputForm.FindControl("Button1")).ClientID%> 
+0

我已經嘗試過,但java腳本沒有發出警告消息,不知道爲什麼它是.. – moe 2014-10-31 18:19:09

+0

也許是因爲國旗總是假?你可以檢查一些JavaScript調試工具的標誌變量的值?根據我在代碼中看到的內容,您似乎在檢查您的選擇是否已被「選中」,也許您可​​以使用SelectedIndex代替? 而不是檢查循環中的下拉列表的值,嘗試這樣看看是否選擇了一個選項:dropdowns.item(i).selectedIndex!==「-1」; – GPierre 2014-10-31 20:26:21

0

如果需要使用客戶端的JavaScript指服務器端控件,然後我發現它通常更容易控制的的ClientIDMode設置爲「靜態」 - 然後你可以把它無論你想要什麼ID,並且你知道它會在頁面上有這個ID,所以你可以編寫JavaScript來使用它。

0

這可能是一種方法

通過類名,如下添加CssClass屬性按鈕

<asp:Button ID="Button1" runat="server" CausesValidation="True" CommandName="Insert" OnClientClick="return validate();" CssClass="UniqueClass" 
           Text="Insert" /> 

和訪問它。

var btn= document.getElementsByClassName("UniqueClass"); 
    var Button1 = btn[0]; 

謹防

getElementsByClassName將返回給定的類名元素的數組,以便確保其獨特的或使用適當的索引來訪問它。

相關問題