我试图更新所有字段,但似乎它没有用?代码中有什么问题吗?
<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;
});
答案 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();
})