自动计算时得到'南'

时间:2014-01-07 05:49:54

标签: javascript asp.net javascript-events

我在ASP.NET中使用Gridview创建表单。当用户填写数量和价格时,它需要自动计算总计。但是,我的Total总是返回Nan(不是数字)。我做错了什么?

ASP页面如下所示:

  <asp:GridView ID="GridView1" runat="server"
 AutoGenerateColumns="false">
         <Columns>
             <asp:BoundField DataField="Item" HeaderText="Item" />
             <asp:BoundField DataField="Price" HeaderText="Item_Desc" ItemStyle-CssClass="price" />
            <asp:TemplateField HeaderText="Jumlahdatang" >
                 <ItemTemplate  >
                      <asp:TextBox ID="Qty" runat="server"  ></asp:TextBox> 
                 </ItemTemplate>
              </asp:TemplateField>

              <asp:TemplateField HeaderText="Harga Satuan" >
                 <ItemTemplate>
                     <asp:TextBox ID="price" runat="server"    ></asp:TextBox>
                 </ItemTemplate> 
              </asp:TemplateField>

              <asp:TemplateField HeaderText="Harga Total"  >
                 <ItemTemplate >
                     <asp:Label ID="total" runat="server" Text="0" ></asp:Label>

                 </ItemTemplate>

              </asp:TemplateField>
         </Columns>
     </asp:GridView>

JavaScript:

 <script type="text/javascript"
 src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
 <script type="text/javascript">
 // give value 0 first time 
     $(function() {
         $("[id*=Qty]").val("0");
         $("[id*=price]").val("0");
         $("[id*=total1]").val("0");
     });
 //check data must number on Qty
     $("[id*=Qty]").live("change", function() {
         if (isNaN(parseInt($(this).val()))) {
             $(this).val('0');
         } else {
             $(this).val(parseInt($(this).val()).toString());
         }
     });
  //check data must number on price
     $("[id*=price]").live("change", function() {
         if (isNaN(parseInt($(this).val()))) {
             $(this).val('0');
         } else {
             $(this).val(parseInt($(this).val()).toString());
         }
     });

     $("[id*=price]").live("keyup", function() {
         if (!jQuery.trim($(this).val()) == '') {
             if (!isNaN(parseFloat($(this).val()))) {
                 var row = $(this).closest("tr");
                 $("[id*=total]", row).html(parseFloat($(".Qty", row).html()) * parseFloat($(this).val()));
             }
         } else {
             $(this).val('');
         }

     });

2 个答案:

答案 0 :(得分:0)

if (isNaN(parseInt($(this).val()))) { 

为什么你同时使用isNan和parseInt?

我认为应该是:

if (isNaN($(this).val()))

如果val = string则返回true,如果是数字

则返回false

另一个..如果你要在公式中使用它们的值,你只需要parseInt。

答案 1 :(得分:0)

这是您的纯化代码:

<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript">
// give value 0 first time 
 $(function() {
     $("[id*=Qty]").val(0);
     $("[id*=price]").val(0);
     $("[id*=total1]").val(0);
 });
//check data must number on Qty
 $("[id*=Qty]").live("change", function() {
     if (isNaN($(this).val())) {
         $(this).val(0);
     }
 });
 //check data must number on price
 $("[id*=price]").live("change", function() {
     if (isNaN($(this).val())) {
         $(this).val(0);
     }
 });

 $("[id*=price]").live("keyup", function() {
     var row = $(this).closest("tr");
     $("[id*=total]", row).html(parseFloat($(".Qty", row).val()) * parseFloat($(this).val()));
 });