使用javascript的asp.net gridview文本框焦点

时间:2011-02-09 15:58:44

标签: javascript asp.net

我正在开发一个asp.net应用程序,其中我有一个从母版页派生的内容页面,在页面内部我有一个gridview控件,其中我有一些绑定字段和一个文本框来获取值并计算剩余部分。我使用以下javascript代码。

     <td colspan="4">
   <div id="divGrid" style="width: 890px; height: 200px; overflow: auto">
      <asp:GridView ID="CustomerGrid" runat="server" BackColor="White" AutoGenerateColumns="False"
          BorderColor="#336666" BorderStyle="Double" BorderWidth="3px" CellPadding="4" 
          GridLines="Horizontal" Width="920px">
          <RowStyle BackColor="White" ForeColor="#333333" />
         <%-- <HeaderStyle CssClass="HeaderFreeze" />--%>
          <Columns>
              <asp:BoundField DataField="Ref_No" HeaderText="Deal/Transfer Ref # " >
                  <HeaderStyle Font-Names="Verdana" Font-Size="11px" />
                  <ItemStyle Font-Names="Verdana" Font-Size="11px" Width="180px" ForeColor="Blue" Font-Bold="true" />
              </asp:BoundField>
              <asp:BoundField DataField="Settlement_Date" HeaderText="Settlement Date" >
                  <HeaderStyle Font-Names="Verdana" Font-Size="11px" />
                  <ItemStyle Font-Names="Verdana" Font-Size="11px" />
              </asp:BoundField>
              <asp:BoundField DataField="Settlement_Amount" HeaderText="Settlement Amt" >
                  <HeaderStyle Font-Names="Verdana" Font-Size="11px" />
                  <ItemStyle Font-Names="Verdana" Font-Size="11px" />
              </asp:BoundField>
              <asp:BoundField DataField="Interest_Rate" HeaderText="Interest Rate" >
                  <HeaderStyle Font-Names="Verdana" Font-Size="11px" />
                  <ItemStyle Font-Names="Verdana" Font-Size="11px" />
              </asp:BoundField>
              <asp:BoundField DataField="PDealerName" HeaderText="Primary Dealer" >
                  <HeaderStyle Font-Names="Verdana" Font-Size="11px" />
                  <ItemStyle Font-Names="Verdana" Font-Size="11px" />
              </asp:BoundField>
              <asp:BoundField DataField="PD_Price" HeaderText="PD Price" >
                  <HeaderStyle Font-Names="Verdana" Font-Size="11px" />
                  <ItemStyle Font-Names="Verdana" Font-Size="11px" />
              </asp:BoundField>

              <asp:TemplateField HeaderText="FaceValue">
                 <ItemTemplate>
                     <asp:Label ID="LBLFaceValue" runat="server" Text='<%# Eval("Face_Value") %>'></asp:Label>
                 </ItemTemplate>
                 <HeaderStyle Font-Names="Verdana" Font-Size="11px" />
                  <ItemStyle Font-Names="Verdana" Font-Size="11px" />
              </asp:TemplateField>                  

             <%-- <asp:BoundField DataField="Face_Value" HeaderText="Face Value" >
                  <HeaderStyle Font-Names="Verdana" Font-Size="11px" />
                  <ItemStyle Font-Names="Verdana" Font-Size="11px" />
              </asp:BoundField>--%>

              <asp:BoundField DataField="Available" HeaderText="Available" >
                  <HeaderStyle Font-Names="Verdana" Font-Size="11px" />
                  <ItemStyle Font-Names="Verdana" Font-Size="11px" />
              </asp:BoundField>
              <asp:TemplateField HeaderText="Value">
              <ItemTemplate>
                  <asp:TextBox ID="txtValue" runat="server" Width="100px" onblur="CalculateTotals();"></asp:TextBox>
              </ItemTemplate>
                  <HeaderStyle Font-Names="Verdana" Font-Size="11px" />
                  <ItemStyle Font-Names="Verdana" Font-Size="11px" />

              </asp:TemplateField>
              <asp:TemplateField HeaderText="Remaining">
                  <ItemTemplate>
                      <asp:Label ID="lblRemaining" runat="server" Text=""></asp:Label>
                  </ItemTemplate>
                  <HeaderStyle Font-Names="Verdana" Font-Size="11px" />
                  <ItemStyle Font-Names="Verdana" Font-Size="11px" />
              </asp:TemplateField>
               <asp:BoundField DataField="Transaction_Type" HeaderText="T" Visible="false">
                  <HeaderStyle Font-Names="Verdana" Font-Size="11px" />
                  <ItemStyle Font-Names="Verdana" Font-Size="11px" />
              </asp:BoundField>
          </Columns>
          <FooterStyle BackColor="White" ForeColor="#333333" />
          <PagerStyle BackColor="#336666" ForeColor="White" HorizontalAlign="Center" />
          <SelectedRowStyle BackColor="#339966" Font-Bold="True" ForeColor="White" />
          <HeaderStyle BackColor="#336666" Font-Bold="True" ForeColor="White" />
      </asp:GridView>
      </div>
      &nbsp;</td>
<script type="text/javascript">

function CalculateTotals() {
    var gv = document.getElementById("<%= CustomerGrid.ClientID %>");
    var tb = gv.getElementsByTagName("input");
    var lb = gv.getElementsByTagName("span");

    var sub = 0;
    var total = 0;
    var indexQ = 1;
    var indexP = 0;

    for (var i = 0; i < tb.length; i++) {
        if (tb[i].type == "text") {
            sub = parseFloat(lb[indexP].innerHTML) - parseFloat(tb[i].value);
            if (sub < 0) 
            {
                alert("Exceeding from the face value...");
                return;
                tb[i].focus();
                //return;
            }

            if (isNaN(sub)) {
                lb[i + indexQ].innerHTML = "";
                sub = 0;
            }
            else {
                lb[i + indexQ].innerHTML = sub;
            }

            indexQ++;
            indexP = indexP + 2;

            total += parseFloat(sub);
        }
    }
}

 </script>

问题是我有一个条件,输入值不能超过面值。如果它超过它显示警告..我想显示错误,焦点应该回到该特定行的文本框控件。不知何故,它没有将焦点设置回特定行的文本框控件。

只需检查我需要修改的区域。

if (sub < 0) 
        {
            alert("Exceeding from the face value...");
            return;
            tb[i].focus();
            //return;
        }

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

返回是在焦点调用之前。焦点永远不会被称为代码当前的方式。

alert("Exceeding from the face value...");
return;
tb[i].focus();

应该是

alert("Exceeding from the face value...");
tb[i].focus();
return;