jquery更新多个文本输入

时间:2011-04-26 18:36:04

标签: jquery

我试图更新所有字段,但似乎它没有用?代码中有什么问题吗?

<tr id="1"><td><input type="text" id="pro_1"><input type="text" id="sales_1"></td></tr> //
<tr id="2"><td><input type="text" id="pro_2"><input type="text" id="sales_2"></td></tr> //
<tr id="3"><td><input type="text" id="pro_3"><input type="text" id="sales_3"></td></tr> //

$('#save_products').live('click',function() {
        var $inputs = $('#form').find("input[type=text]");
        $inputs.each(function(){
            var counter = $inputs.length;
            var pro_id = $(this).closest.parent("tr").pro_id; //<--
            var pro_value = $(this).find('pro_'+pro_id).attr("value");
            var sales_value = $(this).find('sales_'+pro_id).attr("value");
            $.post("include/setting.php?save",{id:pro_id, pro_value:pro_value, sales_value:sales_value, count:counter}, function(data){
                if(data.success) {
                      $('.err_message').html(data.message).addClass('ok').fadeIn('slow');         
                } else {$('.err_message').html(data.message).addClass('error').fadeIn('slow');}
            },"json");
        })
        return false;
    });

3 个答案:

答案 0 :(得分:2)

你正在循环实际的输入元素,所以当你做

        var id = $(this).attr("id");
        var pro_value = $(this).find('pro_'+id).attr("value");
        var sales_value = $(this).find('sales_'+id).attr("value");

id的值不是“1”或“2”或“3”,它实际上是“pro_1”或“pro_2”或“pro_3”。因此,当您查找'pro' + id时,您正在寻找不存在的'propro_1'。

更好的方法可能是

<div class="input_pair">
   <input type="text" class="pro" ><input type="text" class="sales">
<div>



var $pairs = $('#form').find("div.input_pair");
$pairs.each(function(){
     var pro_value=$(this).find('input.pro').val();
     var sales_value=$(this).find('input.sales').val();
     //do the ajax update as you are
}

答案 1 :(得分:1)

var id = $(this).attr("id"); // Id looks something like sales_1
var pro_value = $(this).find('pro_'+id); // Looking for pro_sales_1

您对完整的销售ID进行了修改,您只想解析数字

id = id.substring( 6 )

答案 2 :(得分:1)

var pro_value = $(this).find('pro_'+id).attr("value");
var sales_value = $(this).find('sales_'+id).attr("value");

实际应该是这样的:

var pro_value = $(this).filter('#pro_'+id).attr("value");
var sales_value = $(this).filter('#sales_'+id).attr("value");

找到尝试查找集合中项目中包含的元素,而不是作为项目的子集。你也在ids之前缺少#。

编辑:虽然上述情况仍然如此,但其他答案指出你的整体身份证而不仅仅是最后的数字。我不相信你会得到的是你真正想要的。我假设你试图为每组输入运行一次,而不是两次(这就是现在要做的)。

也许更像是这样:

id-1) <span class="inputSet">
         <input type="text" class="pro" id="pro_1">
         <input type="text" class="sales" id="sales_1">
      </span>
id-2) <span class="inputSet">
         <input type="text" class="pro" id="pro_2">
         <input type="text" class="sales" id="sales_2">
      </span>
id-3) <span class="inputSet">
         <input type="text" class="pro" id="pro_3">
         <input type="text" class="sales" id="sales_3">
      </span>

然后你的js就像这样:

$(".inputSet").each(function(){
   proVal=$(this).find(".pro").val();
   salesVal=$(this).find(".sales").val();
})