让我们以库存的比喻来讨论这个问题,比如我收到一个SKU的20个单位的库存,现在我有三个仓库,我想分发这个库存,每个仓库都有数字字段在他们面前。
Warehouse1 [ 20^] <-- this is html number field and 20 is assigned to first warehouse by default
Warehouse2 [ ^]
Warehouse2 [ ^]
现在,如果用户将仓库2的值更改为10,则仓库1的值应更改为10.如果用户将5放入仓库3,则应在仓库1或仓库2中进行调整。
以下是我正在尝试的代码
function recalculateStockAssignment(ele) {
var prev_val = parseFloat(jQuery(ele).data('prev'));
var dif = prev_val - parseFloat(jQuery(ele).val());
jQuery("input[name='" + jQuery(ele).prop('name') + "']").not(ele).each(
function () {
if (jQuery(this).val() > 0 && dif < 0)
{
var val = parseFloat(jQuery(this).val()) + parseFloat(dif);
console.log("difference is minus", val);
jQuery(this).val(parseFloat(val));
} else
{
var val = parseFloat(jQuery(this).val()) + parseFloat(dif);
console.log("difference is positive", val);
if( parseFloat(jQuery) )
jQuery(this).val(parseFloat(val));
console.log(this);
}
});
jQuery(ele).data('prev', jQuery(ele).val());
}
这没有按预期工作,我感觉有些专业人士可以提出更简单的解决方案。
非常感谢您的帮助,谢谢
答案 0 :(得分:0)
这应该涵盖您的问题或至少让您走上正确的轨道 - 确保设置total_stock变量。此解决方案适用于整数值:
var total_stock = 20
$(document).ready(function(){
$(".warehouse").on("change",function(){
recalculateStockAssignment($(this))
})
})
function recalculateStockAssignment(ele) {
if(ele.val() > total_stock){
ele.val(total_stock)
}
var changed_val = ele.val()
var cur_id = ele.prop('id')
var temp_total = 0
$(".warehouse").each(function(){
temp_total+=parseInt($(this).val())
})
var diff = total_stock - temp_total
$(".warehouse").each(function(){
if($(this).prop('id')!=cur_id){
var val=parseInt($(this).val())
if(val+diff > 0){
$(this).val(parseInt(val)+parseInt(diff))
diff=0
}else{
$(this).val(0)
diff=parseInt(val)+parseInt(diff)
}
}
})
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="number" id="w1" class="warehouse" value="20">
<input type="number" id="w2" class="warehouse" value="0">
<input type="number" id="w3" class="warehouse" value="0">