检测动态生成的输入中的输入

时间:2014-06-10 09:42:07

标签: javascript php jquery loops

我的代码动态生成一系列输入字段。每行字段属于一个数据库记录,我使用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; ?>

我试图让输出显示每行的乘法值但是还没有结果。有人告诉我我在哪里弄错了? 谢谢〜

1 个答案:

答案 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>