使用 jquery closest 的数组字段总和
sum of array fields using jquery closest
我需要一些帮助来解决这个问题,
我动态创建了 div,
<div class='items'>
Item 1 <input type='text' class='subprice' name='item[]'> [X]
Item 2 <input type='text' class='subprice' name='item[]'> [X]
<input type='text' class='subprice' name='subtotal'>
</div>
<div class='items'>
Item 1 <input type='text' class='subprice' name='item[]'> [X]
Item 2 <input type='text' class='subprice' name='item[]'> [X]
Item 3 <input type='text' class='subprice' name='item[]'> [X]
<input type='text' class='subprice' name='subtotal'>
</div>
我如何使用 .closest
获取 item[] 的总数组值并将其显示到小计文本字段。请注意 class 项目是动态创建的,因此它可以创建多次。
我试过了
var i = $(.items).closest();
var arr = i.find('[name="item[]"]');
所以 arr
应该包含最近 class items
内的 item[] 的总和
提前谢谢你。
你的 subtotal
字段应该是数组并尝试,
$('.items').each(function(){
var items = $(this).find('[name="item[]"]'),
total=0;
items.each(function(){
total+=Number(this.value);
});
$(this).find('[name="subtotal[]"]').val(total);
});
片段,
$(function() {
function subTotal(items) {
items.each(function() {
var items = $(this).find('[name="item[]"]'),
total = 0;
items.each(function() {
total += Number(this.value);
});
$(this).find('[name="subtotal[]"]').val(total);
});
}
subTotal($('.items'));
$('.delete').on('click', function() {
items = $(this).closest('.items');
$(this).closest('.item').remove();
subTotal(items);
});
});
.delete {
color: blue;
cursor: pointer;
margin: 0 5px
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='items'>
<div class="item">Item 1 <input type='text' class='subprice' name='item[]' value="8"><span class="delete">Delete</span></div>
<div class="item">Item 2 <input type='text' value="5" class='subprice' name='item[]'><span class="delete">Delete</span></div>
<input type='text' class='subprice' name='subtotal[]'>
</div>
<div class='items'>
<div class="item">Item 1 <input type='text' class='subprice' name='item[]' value="8"><span class="delete">Delete</span></div>
<div class="item"> Item 2 <input type='text' class='subprice' name='item[]' value="55"><span class="delete">Delete</span></div>
<div class="item">Item 3 <input type='text' class='subprice' name='item[]' value="14"><span class="delete">Delete</span></div>
<input type='text' class='subprice' name='subtotal[]'>
</div>
或者,您可以从小计开始并获取其兄弟项(在示例设置中,不需要进一步过滤):
$('[name=subtotal]').val(function(){
return $(this).siblings().toArray().reduce(function(sum,inp){return sum + +inp.value;} ,0);
});
$('[name=subtotal]').val(function(){
return $(this).siblings().toArray().reduce(function(sum,inp){return sum + +inp.value;} ,0);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='items'>
Item 1 <input value=10 type='text' class='subprice' name='item[]'>
Item 2 <input value=11 type='text' class='subprice' name='item[]'>
<input type='text' class='subprice' name='subtotal'>
</div>
<div class='items'>
Item 1 <input value = 5 type='text' class='subprice' name='item[]'>
Item 2 <input value = 6 type='text' class='subprice' name='item[]'>
Item 3 <input value = 7 type='text' class='subprice' name='item[]'>
<input type='text' class='subprice' name='subtotal'>
</div>
我需要一些帮助来解决这个问题,
我动态创建了 div,
<div class='items'>
Item 1 <input type='text' class='subprice' name='item[]'> [X]
Item 2 <input type='text' class='subprice' name='item[]'> [X]
<input type='text' class='subprice' name='subtotal'>
</div>
<div class='items'>
Item 1 <input type='text' class='subprice' name='item[]'> [X]
Item 2 <input type='text' class='subprice' name='item[]'> [X]
Item 3 <input type='text' class='subprice' name='item[]'> [X]
<input type='text' class='subprice' name='subtotal'>
</div>
我如何使用 .closest
获取 item[] 的总数组值并将其显示到小计文本字段。请注意 class 项目是动态创建的,因此它可以创建多次。
我试过了
var i = $(.items).closest();
var arr = i.find('[name="item[]"]');
所以 arr
应该包含最近 class items
提前谢谢你。
你的 subtotal
字段应该是数组并尝试,
$('.items').each(function(){
var items = $(this).find('[name="item[]"]'),
total=0;
items.each(function(){
total+=Number(this.value);
});
$(this).find('[name="subtotal[]"]').val(total);
});
片段,
$(function() {
function subTotal(items) {
items.each(function() {
var items = $(this).find('[name="item[]"]'),
total = 0;
items.each(function() {
total += Number(this.value);
});
$(this).find('[name="subtotal[]"]').val(total);
});
}
subTotal($('.items'));
$('.delete').on('click', function() {
items = $(this).closest('.items');
$(this).closest('.item').remove();
subTotal(items);
});
});
.delete {
color: blue;
cursor: pointer;
margin: 0 5px
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='items'>
<div class="item">Item 1 <input type='text' class='subprice' name='item[]' value="8"><span class="delete">Delete</span></div>
<div class="item">Item 2 <input type='text' value="5" class='subprice' name='item[]'><span class="delete">Delete</span></div>
<input type='text' class='subprice' name='subtotal[]'>
</div>
<div class='items'>
<div class="item">Item 1 <input type='text' class='subprice' name='item[]' value="8"><span class="delete">Delete</span></div>
<div class="item"> Item 2 <input type='text' class='subprice' name='item[]' value="55"><span class="delete">Delete</span></div>
<div class="item">Item 3 <input type='text' class='subprice' name='item[]' value="14"><span class="delete">Delete</span></div>
<input type='text' class='subprice' name='subtotal[]'>
</div>
或者,您可以从小计开始并获取其兄弟项(在示例设置中,不需要进一步过滤):
$('[name=subtotal]').val(function(){
return $(this).siblings().toArray().reduce(function(sum,inp){return sum + +inp.value;} ,0);
});
$('[name=subtotal]').val(function(){
return $(this).siblings().toArray().reduce(function(sum,inp){return sum + +inp.value;} ,0);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='items'>
Item 1 <input value=10 type='text' class='subprice' name='item[]'>
Item 2 <input value=11 type='text' class='subprice' name='item[]'>
<input type='text' class='subprice' name='subtotal'>
</div>
<div class='items'>
Item 1 <input value = 5 type='text' class='subprice' name='item[]'>
Item 2 <input value = 6 type='text' class='subprice' name='item[]'>
Item 3 <input value = 7 type='text' class='subprice' name='item[]'>
<input type='text' class='subprice' name='subtotal'>
</div>