繁体   English   中英

使用 jQuery Ajax 计算每个表行

[英]Using jQuery Ajax to calculate per table row

我刚刚进入 Ajax/jQuery 并希望有人可以帮助我解决这个问题。

我有一个从 php 生成的多行表。 在每个 TR 行上,我有一个我想用来计算时间的 3 个字段(天、小时、分钟)。 变量发布到 ajax.php 文件以进行计算。 并且响应应该填充每个表格行的#totalhrs 输入字段。

到目前为止,我已经让它工作了,但只在第一行,而且只有当我调用那组特定的 ID 时。

我相信我这样做的方式非常丑陋,我在想必须有一种更好更有效的方式。

提前致谢

index.php

<html>
<head>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

<script>
$(document).ready(function(){
  $(".task").click(function() {
    var days=$("#aaa_1_days").val();
    var hrs=$("#aaa_1_hrs").val();
    var mins=$("#aaa_1_mins").val();
    $.ajax({
      url:'ajax.php',
      data:{days:days, hrs:hrs, mins:mins},
      type:'POST',
      success:function(data) {
        $("#aaa_1_totalhrs").val(data);
      }
    });
  });
});

</script>

</head>

<body>

<table>
    <tr>
       <td><input type='number'  class='task' name='aaa_1_days'      id='aaa_1_days'     value='' min='0'  /></td>
       <td><input type='number'  class='task' name='aaa_1_hrs'       id='aaa_1_hrs'      value='' min='0'  /></td>
       <td><input type='number'  class='task' name='aaa_1_mins'      id='aaa_1_mins'     value='' min='0' max='45' step='15' /></td>
       <td><input type='text'    class='task' name='aaa_1_totalhrs'  id='aaa_1_totalhrs' value='' min='0' readonly /></td>
   </tr>
    <tr>
       <td><input type='number'  class='task' name='bbb_2_days'      id='bbb_2_days'     value='' min='0'  /></td>
       <td><input type='number'  class='task' name='bbb_2_hrs'       id='bbb_2_hrs'      value='' min='0'  /></td>
       <td><input type='number'  class='task' name='bbb_2_mins'      id='bbb_2_mins'     value='' min='0' max='45' step='15' /></td>
       <td><input type='text'    class='task' name='bbb_2_totalhrs'  id='bbb_2_totalhrs' value='' min='0' readonly /></td>
   </tr>
    <tr>
       <td><input type='number'  class='task' name='ccc_3_days'      id='ccc_3_days'     value='' min='0'  /></td>
       <td><input type='number'  class='task' name='ccc_3_hrs'       id='ccc_3_hrs'      value='' min='0'  /></td>
       <td><input type='number'  class='task' name='ccc_3_mins'      id='ccc_3_mins'     value='' min='0' max='45' step='15' /></td>
       <td><input type='text'    class='task' name='ccc_3_totalhrs'  id='ccc_3_totalhrs' value='' min='0' readonly /></td>
   </tr>
</table>

</body>
</html>

ajax.php

<?php

$post_days = $_POST['days'];
$post_hrs = $_POST['hrs'];
$post_mins = $_POST['mins'];

if($post_days){$days = $post_days*8;} else $days = 0;
if($post_hrs){$hrs = $post_hrs;} else $hrs = 0;

if($post_mins=='15'){$mins = 0.25;}
else if($post_mins=='30'){$mins = 0.5;}
else if($post_mins=='45'){$mins = 0.75;}
else $mins = 0;

$total = ($days+$hrs+$mins);

echo $total;

?>

您可以使用class从输入框中获取所需的值。 然后,使用$(this).closest("tr")从发生更改事件的输入框中获取最接近的tr ,最后使用.find("yourclassname")获取输入值。

演示代码

 $(document).ready(function() { $(".task").change(function() { //get closest tr var selector = $(this).closest("tr"); //use.find to get requred inputs var days = selector.find(".days").val(); var hrs = selector.find(".hrs").val(); var mins = selector.find(".mins").val(); console.log(days + " " + hrs + " " + mins) $.ajax({ url: 'ajax.php', data: { days: days, hrs: hrs, mins: mins }, type: 'POST', success: function(data) { selector.find(".totalhrs").val(data); } }); }); });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <table> <tr> <!--use class--> <td><input type='number' class='task days' name='aaa_1_days' id='aaa_1_days' value='' min='0' /></td> <td><input type='number' class='task hrs' name='aaa_1_hrs' id='aaa_1_hrs' value='' min='0' /></td> <td><input type='number' class='task mins' name='aaa_1_mins' id='aaa_1_mins' value='' min='0' max='45' step='15' /></td> <td><input type='text' class='task totalhrs' name='aaa_1_totalhrs' id='aaa_1_totalhrs' value='' min='0' readonly /></td> </tr> <tr> <td><input type='number' class='task days' name='bbb_2_days' id='bbb_2_days' value='' min='0' /></td> <td><input type='number' class='task hrs' name='bbb_2_hrs' id='bbb_2_hrs' value='' min='0' /></td> <td><input type='number' class='task mins' name='bbb_2_mins' id='bbb_2_mins' value='' min='0' max='45' step='15' /></td> <td><input type='text' class='task totalhrs' name='bbb_2_totalhrs' id='bbb_2_totalhrs' value='' min='0' readonly /></td> </tr> </table>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM