提问者:小点点

有没有一种方法可以为每一行提供多个计算值? 使用jquery


我对JavaScript/jQuery非常陌生。 我很难计算出每个问题的每行平均数。 将Q,E,T相加,然后除以3=平均值。 我不知道如何解决这个问题,因为错误说有3个元素的id不唯一

下面是我遇到的错误。 遇到错误

Q,E,T和A的HTML代码(平均)

<tbody>
                <tr>
                <td style="text-align: left; width: 316px; border-width: 1px; border-style: solid; border-color: rgb(171, 171, 171);" rowspan="0">{!! $row->function_name !!}</td>
                <td style="text-align: left; width: 316px; border-width: 1px; border-style: solid; border-color: rgb(171, 171, 171);" rowspan="0">{!! $row->mfo_desc !!}</td>
                <td style="text-align: left; width: 341px; border-width: 1px; border-style: solid; border-color: rgb(171, 171, 171);" rowspan="0">{!! $row->success_indicator_desc !!}</td>
                <td style="text-align: left; width: 437px; border-width: 1px; border-style: solid; border-color: rgb(171, 171, 171);" rowspan="0">{!! $row->actual_accomplishment_desc !!}</td>
                </tr>
                <tr style="background-color: rgb(255, 255, 255);">
                    <td rowspan="0" style="text-align: center; border-top: 1pt solid rgb(171, 171, 171); border-right: 1pt solid rgb(171, 171, 171); border-bottom: 1pt solid rgb(171, 171, 171); border-image: initial; border-left: none; background: white; padding: 0.6pt;">
                        <div class="form-label-group">
                            <select name="Q" class="form-control form-control-sm" id="Q" style="width: 50px">
                                <option value="5">5</option>
                                <option value="4">4</option>
                                <option value="3">3</option>
                                <option value="2">2</option>
                                <option value="1">1</option>
                            </select>
                        </div>
                    </td>
                    <td rowspan="0" style="text-align: center; border-top: 1pt solid rgb(171, 171, 171); border-right: 1pt solid rgb(171, 171, 171); border-bottom: 1pt solid rgb(171, 171, 171); border-image: initial; border-left: none; background: white; padding: 0.6pt;">
                        <div class="form-label-group">
                            <select name="E" class="form-control form-control-sm" id="E" style="width: 50px">
                                <option value="5">5</option>
                                <option value="4">4</option>
                                <option value="3">3</option>
                                <option value="2">2</option>
                                <option value="1">1</option>
                            </select>
                        </div>
                    </td>
                    <td rowspan="0" style="text-align: center; border-top: 1pt solid rgb(171, 171, 171); border-right: 1pt solid rgb(171, 171, 171); border-bottom: 1pt solid rgb(171, 171, 171); border-image: initial; border-left: none; background: white; padding: 0.6pt;">
                        <div class="form-label-group">
                            <select name="T" class="form-control form-control-sm" id="T" style="width: 50px">
                                <option value="5">5</option>
                                <option value="4">4</option>
                                <option value="3">3</option>
                                <option value="2">2</option>
                                <option value="1">1</option>
                            </select>
                        </div>
                    </td>

                    <td rowspan="0" style="text-align: center; border-top: 1pt solid rgb(171, 171, 171); border-right: 1pt solid rgb(171, 171, 171); border-bottom: 1pt solid rgb(171, 171, 171); border-image: initial; border-left: none; background: white; padding: 0.6pt;">
                        <div class="form-label-group">
                            <input type="text" class="form-control form-control-sm" name="A" id="A" style="width: 50px" readonly>
                          <select name="A" class="form-control form-control-sm" value="A" id="A" style="width: 50px" readonly>
                        </div>
                    </td>

                    <td style="text-align: center; width: 316px; border-width: 1px; border-style: solid; border-color: rgb(171, 171, 171);" rowspan="0">{!! $row->remarks !!}</td>
                </tr>
            </tbody>

标记用@foreach循环括起来

下面是计算平均值的jquery代码。

$("#Q, #E, #T").change(function(){
    $("#A").val((parseInt($("#Q").val()) + parseInt($("#E").val()) + parseInt($("#T").val())) / 3);
});

对于HTML代码表示歉意。 它是roosterjs网站的输出。 提前谢谢!


共1个答案

匿名用户

首先要修复的是HTML:不应该有具有相同ID的元素。 在表中解决这个问题的一种方法是将行号添加到IDs中(Q1,E1,T1,Q2,E2...),但在您的情况下有一个更好的解决方案:为它们分配类而不是ID(为了清楚起见,我省略了样式):

<tr style="...">
    <td rowspan="0" style="...">
        <div class="form-label-group">
            <select name="Q" class="form-control form-control-sm q-value" style="...">
                <option value="5">5</option>
                <option value="4">4</option>
                <option value="3">3</option>
                <option value="2">2</option>
                <option value="1">1</option>
            </select>
        </div>
    </td>
    <td rowspan="0" style="...">
        <div class="form-label-group">
            <select name="E" class="form-control form-control-sm e-value"  style="...">
                <option value="5">5</option>
                <option value="4">4</option>
                <option value="3">3</option>
                <option value="2">2</option>
                <option value="1">1</option>
            </select>
        </div>
    </td>
    <td rowspan="0" style="...">
        <div class="form-label-group">
            <select name="T" class="form-control form-control-sm t-value" style="...">
                <option value="5">5</option>
                <option value="4">4</option>
                <option value="3">3</option>
                <option value="2">2</option>
                <option value="1">1</option>
            </select>
        </div>
    </td>

    <td rowspan="0" style="...">
        <div class="form-label-group">
            <input type="text" class="form-control form-control-sm a-value" name="A" style="..." readonly>
          <select name="A" class="form-control form-control-sm a-value" value="A" style="..." readonly>
        </div>
    </td>

    <td style="..." rowspan="0">{!! $row->remarks !!}</td>
</tr>

然后,您的javascript针对三个类:当更改事件触发时,您必须找出输入或选择框指向哪一行($(this).closex('tr')),然后在所述行中找到第四个输入/选择:

$(".q-value, .e-value, .t-value").change(function(){
  let currentRow = $(this).closest('tr');
  let EValue = parseInt(currentRow.find('.e-value').val());
  let QValue = parseInt(currentRow.find('.q-value').val());
  let TValue = parseInt(currentRow.find('.t-value').val());
  currentRow.find('a-value').val((EValue  + QValue + TValue ) / 3);
});

现在编辑任何行,相应的结果将被更新。