2012-04-12 66 views
3

大家好我已經寫了下面的腳本來獲取textbox這是在GridView的值,但我得到一些價值爲NaN有人可以告訴我在哪裏我出了錯如何從文本框中使用Javascript在GridView中獲取文本值

這是我的示例腳本

var grid = document.getElementById("<%=grdInvoice.ClientID%>"); 
      var inputs = grid.getElementsByTagName("input"); 
      for (var i = 0; i < inputs.length; i++) { 
       if (inputs[i].type == "text") { 
        if (inputs[i].name.indexOf("txtAmount").value != "") { 
         alert("Not Null"); 
         amnt = parseInt(inputs[i].name.indexOf("txtAmount").value); 
         alert(amnt.toString()); // Getting Nan here 
         //var v = document.getElementById('<%= lblTotal.ClientID %>').value; 
        } 
       } 
      } 

我的網格如下

ddl Quantity desc  Rate Amount 
     1   d  10  10 
     2   d  20  40 

像一些空行也將在那裏我需要總結的Amount和顯示

我的網格視圖

<asp:GridView ID="grdInvoice" runat="server" AutoGenerateColumns="False" GridLines="None" 
         Width="650px" CellPadding="2" CellSpacing="1" ForeColor="#333333" CssClass="inv_grid_data" 
         OnSelectedIndexChanged="grdInvoice_SelectedIndexChanged" OnSelectedIndexChanging="grdInvoice_SelectedIndexChanging" 
         Style="font-family: verdana; font-size: 9px;"> 
         <RowStyle BackColor="#f1f1f2" ForeColor="#333333" BorderColor="#333333" BorderStyle="Solid" 
          BorderWidth="1px" /> 
         <HeaderStyle CssClass="inv_grid_hed" BackColor="#f2f2f2" ForeColor="black" Font-Names="Verdana,Arial,Helvetica,sans-serif" 
          Font-Size="9px" Height="15px" Font-Bold="false" /> 
         <AlternatingRowStyle CssClass="tr2" BackColor="White" ForeColor="#284775" /> 
         <Columns> 
          <asp:TemplateField HeaderText="Item Name" HeaderStyle-Width="140"> 
           <ItemTemplate> 
            <asp:DropDownList ID="ddlItems" runat="server" AutoPostBack="True" OnSelectedIndexChanged="ddlItems_SelectedIndexChanged" 
             DataTextField="LineItemName" DataValueField="LineItemName" CssClass="txt_box_ssm_drop" 
             Width="100%" Font-Names="Verdana,Arial,Helvetica,sans-serif" Font-Size="12px"> 
            </asp:DropDownList> 
           </ItemTemplate> 
           <HeaderStyle Width="180px" /> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="Quantity"> 
           <ItemTemplate> 
            <asp:TextBox ID="txtQuantity" CssClass="txt_box_ssm_big" runat="server" Width="100%"></asp:TextBox> 
           </ItemTemplate> 
           <HeaderStyle Width="100px" /> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="Description"> 
           <ItemTemplate> 
            <asp:TextBox ID="txtDescription" CssClass="txt_box_ssm_big" runat="server" Width="100%"></asp:TextBox> 
           </ItemTemplate> 
           <%--<ItemStyle Height="11px" Width="100px" /> --%> 
           <HeaderStyle Width="260px" /> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="Rate"> 
           <ItemTemplate> 
            <asp:TextBox ID="txtRate" ReadOnly="true" CssClass="txt_box_ssm_big" runat="server" 
             Width="100%"></asp:TextBox> 
           </ItemTemplate> 
           <HeaderStyle Width="100px" /> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="Amount"> 
           <ItemTemplate> 
            <asp:TextBox ID="txtAmount" runat="server" CssClass="txt_box_ssm_big" Width="100%"></asp:TextBox> 
            <%--<asp:Label ID="lblamount" runat="server" Text='<%# Eval("Amount") %>'/>--%> 
           </ItemTemplate> 
           <HeaderStyle Width="100px" /> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="Delete"> 
           <ItemTemplate> 
            <%--<asp:ImageButton ID="ImageButton2" runat="server" ImageUrl="~/images/icon_delete.gif" OnClick="RowDelete_Click" OnClientClick="msg('Can you get there from here?','This is a Title')"/>--%> 
            <asp:ImageButton ID="RowDelete" runat="server" ImageUrl="~/images/icon_delete.gif" 
             OnClick="RowDelete_Click" OnClientClick="return showConfirm()" Style="margin-left: 15px;" /> 
           </ItemTemplate> 
          </asp:TemplateField> 
          <asp:CommandField ShowSelectButton="true" ButtonType="image" SelectImageUrl="~/Invoiceimages/Copy-32(1).png" 
           SelectText="Copy" HeaderText="Copy" /> 
         </Columns> 
         <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
         <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /> 
         <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /> 
         <EditRowStyle BackColor="#999999" /> 
        </asp:GridView> 

我原來的劇本開始,我會在那之後我想補充基於用戶數量在網格視圖量喜歡在標籤中顯示網格總量

<script type="text/javascript"> 
     function multiplication(txtQuantity, txtRate, txtAmount) { 
      var weight = document.getElementById(txtQuantity).value; 
      var rate = document.getElementById(txtRate).value; 
      document.getElementById(txtAmount).value = weight * rate; 
      var amnt = 0; 
//   var Grid_Table = document.getElementById('<%= grdInvoice.ClientID %>'); 
//   for (var row = 1; row < Grid_Table.rows.length; row++) { 

//    var qty = 0; 

//    for (var col = 0; col < Grid_Table.rows[row].cells.length; col++) { 

//     var cellcollectin = Grid_Table.rows[row].cells[col]; 

//     for (var j = 0; j < cellcollectin.childNodes.length; j++) { 

//      if (cellcollectin.childNodes[j].type == "text") { 

//       if (cellcollectin.childNodes[j].name.indexOf("txtAmount") > 1) { 
//        if (cellcollectin.childNodes[j].value != "") { 
//         qty = parseInt(cellcollectin.childNodes[j].value); 
//         amnt = amnt + qty; 
//        } 
//       } 
//      } 
//     } 
//    } 
//   } 
         var grid = document.getElementById("<%=grdInvoice.ClientID%>"); 
         var inputs = grid.getElementsByTagName("input"); 
         for (var i = 0; i < inputs.length; i++) { 
          if (inputs[i].type == "text") { 
           if (inputs[i].name.indexOf("txtAmount").value != "") { 
            alert("Not Null"); 
            amnt = grid.rows[i].cells[1].childNodes[0].value; 
            //amnt = parseInt(inputs[i].name.indexOf("txtAmount").value); 
            alert(amnt.toString()); 
            //var v = document.getElementById('<%= lblTotal.ClientID %>').value; 
           } 
          } 
         } 
      document.getElementById('<%= lblTotal.ClientID %>').innerHtml = amnt.toString(); 
     } 
    </script> 
+0

有可能是您解析字符串值轉換成integer..That可能是原因 – 2012-04-12 09:30:15

+0

用了'ParseInt'我沒有得到任何警告 – Dotnet 2012-04-12 09:33:14

+0

轉換前的機會,試圖提醒輸入[I]。名稱.indexOf(「txtAmount」)。價值 – 2012-04-12 09:34:14

回答

4

畢竟這裏是解決

<script type="text/javascript"> 
    function multiplication(txtQuantity, txtRate, txtAmount) { 
     var col1; 
     var totalcol1 = 0; 
     var weight = document.getElementById(txtQuantity).value; 
     var rate = document.getElementById(txtRate).value; 
     document.getElementById(txtAmount).value = weight * rate; 
     var grid = document.getElementById('<%=grdInvoice.ClientID %>'); 


     for (i = 0; i < grid.rows.length; i++) { 
      col1 = grid.rows[i].cells[4]; 
      //col2 = grid.rows[i].cells[1]; 

      for (j = 0; j < col1.childNodes.length; j++) { 
       if (col1.childNodes[j].type == "text") { 
        if (!isNaN(col1.childNodes[j].value) && col1.childNodes[j].value != "") { 
         totalcol1 += parseInt(col1.childNodes[j].value) 
        } 
       } 
      } 
     } 
     document.getElementById('<%= lblTotal.ClientID %>').innerHTML = totalcol1.toFixed(2).toString(); 
    } 
</script> 
0

我認爲您使用的方法是錯誤的。最好使用的東西,如下一個:

var inputs = grid.getElementsByTagName("input"); 
var grid = document.getElementById('<%= grdInvoice.ClientID %>'); 

for (var i = 0; i < inputs.length; i++) { 
    if (inputs[i].type == "text") {   
     amnt = parseInt(grid.rows[i].cells[2].childNodes[0].value;); 
     alert(amnt.toString()); // Getting Nan here 
     //var v = document.getElementById('<%= lblTotal.ClientID %>').value; 
    } 
} 
+0

沒有一個值存在我想通過網格視圖中可用的文本框循環 – Dotnet 2012-04-12 10:16:37

+0

檢查我的更新在我的問題中一次 – Dotnet 2012-04-12 10:18:46

+0

請嘗試這一個.. – 2012-04-12 10:22:25

1

。在你的代碼中的問題,JavaScript的indexOf()或者返回-1或正整數,value輸入文本框的財產,有無關indexOf()

這種替換代碼:

var grid = document.getElementById("<%=grdInvoice.ClientID%>"); 
    var inputs = grid.getElementsByTagName("input"); 
    for (var i = 0; i < inputs.length; i++) { 
     if (inputs[i].type == "text") { 
      if (inputs[i].name == "txtAmount" || inputs[i].id == "txtAmount") { 
       amnt = parseInt(inputs[i].value); 
       alert(amnt.toString()); 
      } 
     } 
    } 
+0

這是行不通的 – Dotnet 2012-04-12 11:08:00

+0

問題出在哪裏?這個對我有用。 – Coder 2012-04-12 11:29:36

+0

我有一個使用gridview的母版頁,那麼它是找到'if(inputs [i] .name ==「txtAmount」)的正確方法' – Dotnet 2012-04-12 11:32:43

0

在GridView

<asp:GridView ID ="grvAddItems" runat="server"> 
<asp:TemplateField HeaderText="Quantity"> 
      <ItemTemplate> 
       <asp:TextBox CssClass="field-text1" Width="70 px" ID="txtQuantity" runat="server" TextMode="Number" onblur="findcontrol()"></asp:TextBox> 
      </ItemTemplate> 
      </asp:TemplateField> 
</asp:GridView> 

Javascript代碼

function findcontrol() 
     { 
      var textBoxQuantity = document.getElementsByClassName("field-text1"); 
for (var i = 0; i < textBoxQuantity.length; i++) { 
       findvalue(textBoxQuantity[i].id); 
      } 
     } 
function findvalue() 
{ 
var Quantity = document.getElementById(quantity).value; 
if (Number(Quantity) > 0){ 
// your calculations here 
} 
內文本
+0

請在發佈之前解釋您的代碼。 – Shiro 2016-07-03 10:52:05

相關問題