calcul jQuery不起作用

时间:2017-05-15 13:05:03

标签: javascript jquery

我尝试默认使用calcul更改值:默认值为* quantity / 100.在我的脚本中,某些东西不起作用,因为什么都没发生,我无法找到! (jQuery对我来说很新......)



$(function () {
    $("#calcul").click(function (e) {
      e.preventDefault();
      var valeur = parseFloat($("#valquantite").text() );

      $("#nutrition > tbody > tr").each(function () {
        var valeurOrigin = parseFloat($(this).find("td").eq(1).text().replace(",", "."));
        var newValeur;
        if ($.isNumeric(valeurOrigin) === true) {
          newValeur = valeurOrigin*valeur/100;
          newValeur = Math.ceil(newValeur*1000)/1000;
        } else {
          newValeur = $(this).find("td").eq(1).text();
        }

        $(this).find("td").eq(2).html(newValeur);
      });
    });
  });

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div style="overflow-x:scroll;;" name="formu">
<table class="table table-striped" id="nutrition" >
  <thead>
    <tr>
      <th>Aliments</th>
      <th id="qty">Poids</th>
      <th class="generaux">Energie kJ</th>
      <th class="generaux">Energie kcal</th>
    </thead>
      <tbody class="text-primary" id="">
      <tr><td>Pain au lait, préemballé:</td><td id="valquantite"><strong>35gr</strong></td>
        <td class="generaux" name="">1510</td>
        <td class="generaux">358</td>  
      </tr>
      <tr><td>Total</td>
        <td><strong>50gr</strong></td>
      </tr>
      </tbody>
    </table>
    <input class="btn btn-primary" type="button" value="Calculer" id="calcul" />
&#13;
&#13;
&#13;

我尝试做的是名称后面的第一列从表中检索数量(每行不同),然后我检索默认列的值energie_kj,energie_kcal,proteines等。来自a table(有60列!!它们已经默认计算,我不需要进行任何转换)。一些单元格包含我想要显示为文本的文本(例如:nc,trace,&lt;)。然后我必须计算每列的总数(忽略包含文本的单元格)。这是我的问题!我发布了另一个问题同样的问题,js中的代码几乎可以工作但不完全......在这里:Javascript problems with NaN 提前感谢您的回答。

2 个答案:

答案 0 :(得分:0)

希望这会对你有所帮助。用以下内容替换您的代码:我只是解析您的 valeur 变量并在调用 .each 函数时替换&gt; 符号并应用 Id =营养表格,而不是 tbody 标记。

  $(function () {
    $("#calcul").click(function (e) {
      e.preventDefault();
      var valeur = parseInt($("#valquantite").text());

      $("#nutrition tbody tr").each(function () {
        var valeurOrigin = parseFloat($(this).find("td").eq(2).text().replace(",", "."));
        var newValeur;
        if ($.isNumeric(valeurOrigin) === true) {
          newValeur = valeurOrigin*valeur/100;
          newValeur = Math.ceil(newValeur*1000)/1000;
        } else {
          newValeur = $(this).find("td").eq(1).text();
        }

        $(this).find("td").eq(2).html(newValeur);
      });
    });
  });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div style="overflow-x:scroll;;" name="formu">
<table class="table table-striped" id="nutrition">
  <thead>
    <tr>
      <th>Aliments</th>
      <th id="qty">Poids</th>
      <th class="generaux">Energie kJ</th>
      <th class="generaux">Energie kcal</th>
    </thead>
      <tbody class="text-primary">
      <tr><td>Pain au lait, préemballé:</td><td id="valquantite"><strong>35gr</strong></td>
        <td class="generaux" name="">1510</td>
        <td class="generaux">358</td>  
      </tr>
      <tr><td>Total</td>
        <td><strong>50gr</strong></td>
      </tr>
      </tbody>
    </table>
    <input class="btn btn-primary" type="button" value="Calculer" id="calcul" />

答案 1 :(得分:0)

问题可能是,我们并不确切地知道您要计算的是什么或数据来自何处。您引用的valQuantite是否会针对每行进行更改?如果是这样,为什么它在每个函数之外定义?如果没有,为什么它引用表格第一行的值?

进行一些研究,你似乎想要获取数量列并将其与energie kJ列一起使用来计算......某事。我建议使用三列的类,valquantite,energie-kj和energie-kcal,然后你可以用它们以有意义的方式操纵各列。使用$(this).find(“td”)。eq(2).text()与编码器一样好 - 如果列布局发生变化怎么办?相反,只需使用$(this).find(“。energie-kj”)。text()就可以了。

现在,根据你的需要显示kj(通过获取数量并乘以kj,然后舍入),你可以通过将该数除以4.1868来计算kCal并根据需要进行舍入

但是请注意,我已经修改了你的代码 - 数量似乎随着每一行而改变,所以我在每个语句中移动了valQuantite。另外,我不能强调,我已经将我的代码评论为愚蠢。这样做可以更容易地跟踪每行代码所支持的内容,以及它实际执行的操作。并使用您的控制台,这是您的调试FRIEND!洛尔

$(function() {
  // When the button is clicked, calculate the values.
  $("#calcul").click(function(e) {
    // First, make sure the button doesn't submit...
    e.preventDefault();

    // Each row is handled individually, so 
    $("#nutrition > tbody > tr").each(function() {
      // First, get the qty for this row
      var valeur = parseFloat($(this).find(".valquantite").text());
      /****
       * Here is a case. We have hard-wired to use the 
       *  third column of the table for the original val,
       *  but we could also add a class for this col and
       *  reference that: $(this).find(".energie-kj");
       ****/
      var valeurOrigin = parseFloat($(this).find("td").eq(2).text().replace(",", "."));
      var energyKJ, energyKCal;
      // If the energie kJ value is numeric, we do the first
      if ($.isNumeric(valeurOrigin) === true) {
        // calculate some value from the energie kJ and qty,
        energyKJ = valeurOrigin * valeur / 100;
        // 1 kCal = 4.1868 kJ, so do the conversion
        energyKCal = (energyKJ/4.1868).toFixed(2);
        energyKJ = energyKJ.toFixed(2);
      } else {
        // If the energie kJ value is NOT numeric, we simply
        //   set the displayed value to this
        newValeur = $(this).find("td").eq(2).text();
      }
      $(this).find(".energie-kj").text(energyKJ);
      $(this).find(".energie-kcal").text(energyKCal);
    });
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div style="overflow-x:scroll;;" name="formu">
  <table class="table table-striped" id="nutrition">
    <thead>
      <tr>
        <th>Aliments</th>
        <th id="qty">Poids</th>
        <th class="generaux">Energie kJ</th>
        <th class="generaux">Energie kcal</th>
    </thead>
    <tbody class="text-primary" id="">
      <tr>
        <td>Pain au lait, préemballé:</td>
        <td class="valquantite"><strong>35gr</strong></td>
        <td class="generaux energie-kj" name="">1510</td>
        <td class="generaux energie-kcal">358</td>
      </tr>
      <tr>
        <td>Some other thing...:</td>
        <td class="valquantite"><strong>45gr</strong></td>
        <td class="generaux energie-kj" name="">1510</td>
        <td class="generaux energie-kcal">358</td>
      </tr>      <tr>
        <td>Total</td>
        <td><strong>50gr</strong></td>
      </tr>
    </tbody>
  </table>
  <input class="btn btn-primary" type="button" value="Calculer" id="calcul" />