我的代码动态生成一系列输入字段。每行字段属于一个数据库记录,我使用php的动态数组表示法('[]')来捕获值。 然后在输入字段中,我想显示已经从数据库生成数据的项目总数乘以的价格输入值。
我使用放置在foreach循环中的javascript来检测输入并将其相乘,但它仅适用于第一个字段,第二个字段也适用于第一个字段上显示的乘法值。
这是代码结构:
<?php foreach ($barang->result_array() as $row): ?>
<tr>
<td><?php echo $row['nmbr']; ?> </td>
<td><?php echo $row['jumlah']?> </td>
<td><input id="pnwrn" type="text" name="pnwrn[]" value="" />
<input type="hidden" name="id_barang[]" value="<?php echo $row['id_barang']?>" />
<input type="hidden" name="jumlah[]" value="<?php echo $row['jumlah']?>" /> </td>
<td><div id="output"><script type="text/javascript">
var harga = <?php echo $row['jumlah']; ?>;
$('input').bind('input propertychange', function () {
$('#output').html($(this).val()*harga);
});
</script>
</div></td>
</tr>
<?php endforeach; ?>
我试图让输出显示每行的乘法值但是还没有结果。有人告诉我我在哪里弄错了? 谢谢〜
答案 0 :(得分:0)
其他人在评论中指出了几个问题。
页面上的每个值都在改变的原因是因为你使用输出div而不是类的id而你的jQuery更改处理程序说:“获取输出id的所有内容并将这个新的html放入它。”除此之外,在页面上多次使用id无效。因此,将输出和pnwrn更改为类。
为了便于以后获取相应的'harga'值,您可以将其作为数据存储在输入中。
<?php foreach ($barang->result_array() as $row): ?>
<tr>
<td><?php echo $row['nmbr']; ?> </td>
<td><?php echo $row['jumlah']?> </td>
<td><input class="pnwrn" type="text" name="pnwrn[]" value="" data-harga="<?php echo $row['jumlah']?>" />
<input type="hidden" name="id_barang[]" value="<?php echo $row['id_barang']?>" />
<input type="hidden" name="jumlah[]" value="<?php echo $row['jumlah']?>" /> </td>
<td><div class="output"></div></td>
</tr>
<?php endforeach; ?>
第二个问题是您在每个表行中编写一个单独的处理程序。这不仅效率低,而且难以读取输出而且完全没必要。您只需要在页面上输入一次脚本,这样就不会将其包含在循环中。要获得计算的相应值,您只需检索存储在输入中的数据值即可。然后,您可以使用DOM遍历来查找相应的输出div。在这种情况下,转到最近的祖先行,然后使用输出类查找其后代元素。此外,除非您使用的是旧版本的jQuery,否则请使用on方法而不是弃用的bind。
<script type="text/javascript">
$('input').on('change', function () {
var harga = parseInt($(this).data('harga'));
$('this').parents('tr').find('.output').html($(this).val()*harga);
});
</script>