【问题标题】:get 'Nan' when auto calculate自动计算时得到'Nan'
【发布时间】:2014-01-07 05:49:53
【问题描述】:

我正在使用 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('');
         }

     });

【问题讨论】:

  • 如果您的某个字段中的某个值无法解析为整数,则可能会发生这种情况。
  • 添加引号(单引号或双引号) javascript 会将值读取为字符串。我会删除您输入值中的引号。
  • 也许您的输入中有逗号作为小数分隔符?
  • 感谢您的回答。我输入整数类型值(1,2,3,4)并返回nan。

标签: javascript asp.net javascript-events


【解决方案1】:
if (isNaN(parseInt($(this).val()))) { 

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

我认为应该是:

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

如果 val = string 则返回 true,如果 number 则返回 false

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

【讨论】:

  • 它用于转换不是数字时变成0。你可以尝试输入一个字符使其变成0
【解决方案2】:

这是您的纯化代码:

<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()));
 });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-19
    • 2015-07-08
    • 2023-02-04
    • 2014-10-19
    • 2011-05-31
    • 2014-02-14
    • 2014-03-29
    • 1970-01-01
    相关资源
    最近更新 更多