获取一列的值并将其传递给另一列

时间:2013-12-19 16:42:31

标签: javascript jquery

我有一张桌子,如果我点击一个按钮,我想从charge_outstanding_NUM中取值,并将charge_receipt_NUM设置为它。我需要一个可重用的脚本,因为我不知道将通过哪些行发布。

<table>
  <thead>
    <tr>
      <th>ID</th>
      <th>Value</th>
      <th>Outstanding</th>
      <th>Reciept</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>001</td>
      <td>150.00</td>
      <td id="charge_outstanding_1">150.00</td>
      <td><input type="text" name="charge_receipt_1" id="charge_receipt_1" value=""></td>
    </tr>
    <tr>
      <td>002</td>
      <td>10.00</td>
      <td id="charge_outstanding_2">10.00</td>
      <td><input type="text" name="charge_receipt_2" id="charge_receipt_2" value=""></td>
    </tr>
    <tr>
      <td>003</td>
      <td>250.00</td>
      <td id="charge_outstanding_3">250.00</td>
      <td><input type="text" name="charge_receipt_3" id="charge_receipt_3" value=""></td>
    </tr>
  </tbody>
</table>

我的jquery不工作,我不知道为什么。我点击按钮然后循环遍历以'charge_outstanding_'开头的每个col,然后获取该值并将其分配给同一行内最近的输入。

$('#pay_in_full').click(function(){
    $("[id^=charge_outstanding_]").each(function(){
        charge = $(this).val();
        $(this).closest('input').val(charge);
    });
});

2 个答案:

答案 0 :(得分:1)

.Closest将搜索祖先元素。在您的情况下,目标input是所选元素的下一个兄弟的子节点。因此,您必须使用.find().children()来选择它。

尝试,

$('#pay_in_full').click(function(){
    $("[id^='charge_outstanding_']").each(function(){
        charge = parseInt($(this).text());
        $(this).next().find('input').val(charge);
    });
});

此外,您选择的是td element,因此您必须使用.text()才能获取其文字.val()

DEMO

答案 1 :(得分:1)

工作JSfiddle:http://jsfiddle.net/F5NvW/2/

您的代码问题:charge = $(this).val();您发现td没有任何价值,您需要.html()

$(document).on("click", "#pay_in_full", function() {
    $("[id^=charge_outstanding_]").each(function(){
        var charge = $(this).html();
        $(this).next().find('input').val(charge);
    });
});

建议:对每个<td>使用类名称

Jsfiddle:http://jsfiddle.net/F5NvW/

注意:不容易出错..

$(document).on("click", "#pay_in_full", function() {
    $(".outstanding").each(function(){
        var charge = $(this).html();
        $(this).next().find('.paidAmount').val(charge);
    });
});