使用jqueryajaxxml更新td单元输入字段

使用jqueryajaxxml更新td单元输入字段,jquery,xml,ajax,Jquery,Xml,Ajax,我在服务器端生成了一个动态表,其中的单元格包含一些HTML标记、输入字段以及纯文本。我还有一个滑块小部件,它允许用户向单元格中的数字添加一个百分比。滑块进行ajax调用,该调用返回一个有效的XML文件,其中包含表中每个单元格(td)的一个节点。这一切都很好 $('#point_value').live("change", function(){ var this_sct=$(".program_grid"); $.ajax({ type:'POST',

我在服务器端生成了一个动态表,其中的单元格包含一些HTML标记、输入字段以及纯文本。我还有一个滑块小部件,它允许用户向单元格中的数字添加一个百分比。滑块进行ajax调用,该调用返回一个有效的XML文件,其中包含表中每个单元格(td)的一个节点。这一切都很好

$('#point_value').live("change", function(){
    var this_sct=$(".program_grid");

    $.ajax({
        type:'POST',
        url:"ajax/points_update.php",
        data:{
            pr_id:$("#programid").val(),
            point:$("#point_value").val(),
            calc_lease_amount:$("#calc_lease_amount").val(),
            calc_lease_amount_extra_dollar:$("#calc_lease_amount_extra_dollar").val()
        },
        context:document.body,
        dataType:"xml",
        success:function(xml){
            $(xml).find('payment').each(function(){
            ... this is where the code needs to loop through each <td>
            ... and update the existing values with the new XML values

            >> doesn't work >> $(this_sct).next('input[name^="elb"]').val($(this).find("payment_h").text());                

            ... replace dynamically named input 'elb##' value with new number
            ... each <td> will have an input  field needing to be updated
            ...   <td><input name='elb1' value='123.45'></td>
            ...   <td><input name='elb2' value='419.11'></td>

        }
    });
});
问题是我不确定如何同时循环遍历XML和单元格。我现在正处于检索XML数据的良好状态

$('#point_value').live("change", function(){
    var this_sct=$(".program_grid");

    $.ajax({
        type:'POST',
        url:"ajax/points_update.php",
        data:{
            pr_id:$("#programid").val(),
            point:$("#point_value").val(),
            calc_lease_amount:$("#calc_lease_amount").val(),
            calc_lease_amount_extra_dollar:$("#calc_lease_amount_extra_dollar").val()
        },
        context:document.body,
        dataType:"xml",
        success:function(xml){
            $(xml).find('payment').each(function(){
            ... this is where the code needs to loop through each <td>
            ... and update the existing values with the new XML values

            >> doesn't work >> $(this_sct).next('input[name^="elb"]').val($(this).find("payment_h").text());                

            ... replace dynamically named input 'elb##' value with new number
            ... each <td> will have an input  field needing to be updated
            ...   <td><input name='elb1' value='123.45'></td>
            ...   <td><input name='elb2' value='419.11'></td>

        }
    });
});
HTML示例文件

<?xml version="1.0" encoding="iso-8859-1"?>
<program>
<payment>
    <payment_h>3018.48</payment_h>
    <payment_l>2018.48</payment_l>
    <bo_1>100.62</bo_1>
    <bo_2>17.45</bo_2>
</payment>
<payment>
    <payment_h>2269.74</payment_h>
    <payment_l>1269.74</payment_l>
    <bo_1>75.66</bo_1>
    <bo_2>13.12</bo_2>
</payment>
<payment>
    <payment_h>1897.20</payment_h>
    <payment_l>897.20</payment_l>
    <bo_1>63.24</bo_1>
    <bo_2>10.97</bo_2>
</payment>
</program>
<table>
<tr>
    <th></th>
    <th>header 1</th>
    <th>header 2</th>
    <th>header 3</th>
</tr>
<tr>
    <th>row 1</th>
    <td><input type="hidden" name='elb7' value='123.45'>123.45</td>
    <td><input type="hidden" name='elb8' value='823.15'>823.15</td>
    <td><input type="hidden" name='elb9' value='1123.95'>1123.95</td>
</tr>   
<tr>
    <th>row 2</th>
    <td><input type="hidden" name='elb10' value='2123.45'>2123.45</td>
    <td><input type="hidden" name='elb11' value='3123.45'>3123.45</td>
    <td><input type="hidden" name='elb12' value='4123.45'>4123.45</td>
</tr>   
</table>

标题1
标题2
标题3
第1行
123.45
823.15
1123.95
第2排
2123.45
3123.45
4123.45
我很接近,但需要一些指导

提前谢谢。

看来你们很接近了(我几乎不敢相信这会这么容易)。 按以下方式更改成功功能:

   success:function(xml){
                var pos =0;
                $(xml).find('payment').each(function(){
                    var e = $(this_sct).find('input[name^="elb"]')[pos];
                    $(e).val($(this).find("payment_h").text());
                    pos++;
                })
有一些改进是可能的,但这应该说明方向。这假设“This_sct”是应该更改的td的父tr元素。

可能稍微短一点:

success : function(xml){
    $(xml).find('payment').find("payment_h").each(function(ind){
         $('input[name^="elb"]').eq(ind).val($(this).text());
    });
}

你到底想做什么还不是很清楚。缺少一些细节。将xml支付与td关联的规则是什么?td的位置与支付或其他内容相同?检索XML数据时,我需要获取数据的第一个节点,并将其插入表中的第一个节点,将第二个节点插入第二个节点。我可以使用
.each()
函数循环遍历XML数据,但需要同时从一个单元格移动到另一个单元格,直到所有XML节点都已使用且所有单元格都已更新。问题,是否还要更改输入字段后面的文本?i、 e.
value='123.45'>123.45
更改这两个123.45值?
.live()
被弃用或
.on()
-对于较新的jQuery版本是的,我将更改这两个值(在输入中,以及单元格中的文本)。我想一旦我能改变其中一个,我就能很简单地找出另一个。谢谢你的提问。这对我来说似乎也有意义:)-虽然我可能会在输入中添加一个类,并在该类的所有输入中通过索引访问它们。关闭,但
pos
变量将更改,并且不总是0。然而,这让我想到,如果我可以选择表的
的第一个
pos
,那么我就可以从那里得到它。哦,不,“this_sct”是包含此表和其他元素的父级
。想法?我不明白你的意思。如果带有输入的数字td与xml中的pyment条目相同,则应该这样做。如果有其他规则,请在你的问题中加入这个。哦!你完全正确。当我测试它时,我只是查看文本的屏幕表示,而不是“隐藏”输入值。非常感谢。也谢谢你!实际上,我将结合使用你的答案和“被接受”的答案(仅仅是因为HR117获得了第一名)。