【问题标题】:Javascript addition not workingJavascript添加不起作用
【发布时间】:2012-06-02 07:11:23
【问题描述】:

我正在使用 SMATY 模板引擎构建一个电子购物网站。在我的 viewCart 页面中,我已经根据数量计算了单个商品的价格,使用 javascript 但无法计算总值。

{foreach name = feach item = k from = $res key = ind}

   <!-- PRODUCT INFO -->

   <div class="cleaner_h20">&nbsp;</div>

   <div id="iteminfo">
   <span class="styleblue">{$k->brand} {$k->model}</span>
    </div>
     <div id="itemsmall">
     Rs. <span id="pro_prc{$ind}">{$k->price}</span>
   </div>
    <div id="itemsmall">


 <select id="qty{$ind}" name="qty" onchange="change_price('{$ind}')">

       <option name="1" value="1">1</option>
       <option name="2" value="2">2</option>
       <option name="3" value="3">3</option>
       <option name="4" value="4">4</option>
  </select>


     </div>
    <div id="itemsmall_long"> <a href="#"><img src="{$path_css}images/remove.png" /></a>
    </div>
    <div id="itemsmall">
    Rs.<span id="prc{$ind}">  {$k->price}</span>
   </div>

    <div class="cleaner_h20">&nbsp;</div>


       {literal}
       <script>
        function change_price(ind)
        {

         var y=document.getElementById("pro_prc"+ind).innerHTML;
         //alert(y);
        var z=document.getElementById("qty"+ind).value;
           // alert(z);
         x=y*z;
        // alert(x);
         document.getElementById("prc"+ind).innerHTML=x;

        }
       </script>     
       {/literal}

{/foreach}

上述警报显示 NaN 。我很迷惑 。可能是我的逻辑不正确。

【问题讨论】:

    标签: javascript for-loop logic smarty


    【解决方案1】:

    使用 parseInt 或 parseFloat 将字符串转换为整数,然后再相乘:

    function change_price(ind)
    {
       var y=parseInt(document.getElementById("pro_prc"+ind).innerHTML);
       //alert(y);
       var z=parseInt(document.getElementById("qty"+ind).value);
       // alert(z);
       x=y*z;
       // alert(x);
       document.getElementById("prc"+ind).innerHTML=x;
    }
    

    【讨论】:

      【解决方案2】:

      我认为你需要解析字符串。

      var y=document.getElementById("pro_prc"+ind).innerHTML
      var y1=parseFloat(y).toFixed(4);
      var z=document.getElementById("qty"+ind).value;
      var z1=parseFloat(z).toFixed(4);
      

      【讨论】:

        【解决方案3】:

        因为代码中的 y 和 z 代表字符串,所以你应该这样做:var y = parseInt(y);var z = parseInt(z);

        【讨论】:

        • 我将代码修改为var y=document.getElementById("pro_prc"+ind).innerHTML; //alert(y); y = parseInt(y); var z=document.getElementById("qty"+ind).value; // alert(z); x=y*z; // alert(x); x = parseInt(x); document.getElementById("prc"+ind).innerHTML=x; var total = total + x; alert(total);,但仍然出现相同的NaN!
        • 你离开评论标志//了吗?
        • 我发表评论 // 只是为了提醒 yz
        • 您是否确保后端的参数yz可以正确解析为数字?
        • y 的值来自数据库,类型为INT(11)z 来自 Select - Option 下拉菜单。 &lt;select id="qty{$ind}" name="qty" onchange="change_price('{$ind}')"&gt; &lt;option name="1" value="1"&gt;1&lt;/option&gt; &lt;option name="2" value="2"&gt;2&lt;/option&gt; &lt;option name="3" value="3"&gt;3&lt;/option&gt; &lt;option name="4" value="4"&gt;4&lt;/option&gt; &lt;/select&gt;
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-20
        • 1970-01-01
        • 1970-01-01
        • 2014-04-27
        相关资源
        最近更新 更多