2016-12-02 84 views
0

我正在爲我的餐廳開發庫存檢查表單。我的想法是,我可以舉例說一部分裝滿伏特加酒的瓶子(例如!),並根據該重量以毫升爲單位的體積將根據產品的重量(調節器)和密度自動計算。在JQuery/Javascript中使用動態變量名稱進行加減

該代碼是使用PHP自動生成的。這裏是一個例子,我選擇哪一瓶伏特加酒,並根據該選擇,我想在量程'1_liveWeight'中顯示數量。我由於我有限的經驗時遇到的問題是這行代碼:

var qty = (weight - adjuster) * density; 

我想它像這樣的功能:

var qty = (weight - adjuster_!value selected from item_1!) * density!value selected from item_1! 

之間的位!是我想插入價值的地方。

下面是在php中生成的代碼的摘錄。

HTML

<select id='item_1'> 
    <option value='3'>Smirnoff Vodka 1000ml</option> 
    <option value='4'>Absolute Vodka 750ml</option> 
</select> 
<input type='hidden' id='adjuster_3' value='140'> 
<input type='hidden' id='density_3' value='0.96'> 
<input type='hidden' id='adjuster_4' value='100'> 
<input type='hidden' id='density_4' value='0.96'> 
<input type='text' id ='weight_1' name ='weight'> 
<span id='1_liveWeight'>0</span> 

JQuery的

$(document).ready(function(){ 
    $("#item_1").change(function(){ 
     var item = $('#item_1').val(); 
     var adjuster3 = $('#adjuster_3').val(); 
     var density3 = $('#density_3').val(); 
     var adjuster4 = $('#adjuster_4').val(); 
     var density4 = $('#density_4').val(); 
     var weight = $('#weight_1').val(); 
     var qty = (weight - adjuster)*density+item; 
     $("#1_liveWeight").html("<b>"+ qty +"</b>"); 
    }); 
}); 

我希望我已經解釋了我的問題不夠好!感謝您的幫助,

DB

回答

0

您需要根據項目選擇正確的調整和密度可變分配:

$(document).ready(function(){ 
     $("#item_1").change(function(){ 
      var item = $('#item_1').val(); 
      var adjuster3 = $('#adjuster_3').val(); 
      var density3 = $('#density_3').val(); 
      var adjuster4 = $('#adjuster_4').val(); 
      var density4 = $('#density_4').val(); 
      var weight = $('#weight_1').val(); 

      weight = Number(weight); 
      var adjuster, density; 
      if(item == 3){ 
       adjuster = Number(adjuster3); 
       density = Number(density3); 
      } 
      else if(item == 4){ 
       adjuster = Number(adjuster4); 
       density = Number(density4); 
      } 
      var qty = (weight - adjuster) * density; 
      $("#1_liveWeight").html("<b>"+ qty +"</b>"); 
     }); 
    }); 
0

我可能會做更多的東西是這樣的:

$(document).ready(function(){ 
 

 
    var density = 0; 
 
    var adjuster = 0; 
 
    
 
    $("#item_1").change(function(){ 
 
    recalculateWgt(); 
 
    }); 
 

 
    $("#weight_1").keyup(function(){ 
 
    recalculateWgt(); 
 
    }); 
 
    
 
    recalculateWgt(); 
 
    
 
    function recalculateWgt() { 
 
     var item = $('#item_1').val(); 
 
     var adjuster = $('#adjuster_' + item).val(); 
 
     var density = $('#density_' + item).val(); 
 
     var weight = $('#weight_1').val(); 
 
     var qty = (weight - adjuster)*density+item; 
 
     $("#1_liveWeight").html("<b>"+ qty +"</b>"); 
 
    } 
 
    
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<select id='item_1'> 
 
    <option value='3'>Smirnoff Vodka 1000ml</option> 
 
    <option value='4'>Absolute Vodka 750ml</option> 
 
</select> 
 
<input type='hidden' id='adjuster_3' value='140'> 
 
<input type='hidden' id='density_3' value='0.96'> 
 
<input type='hidden' id='adjuster_4' value='100'> 
 
<input type='hidden' id='density_4' value='0.96'> 
 
<input type='text' id ='weight_1' name ='weight'> 
 
<span id='1_liveWeight'>0</span>

如果您希望僅在數量字段失去焦點時更新值,則可以使用$("#weight_1").change()

-2

我結束了通過學習的eval()解決問題

它的工作像預期一樣:

eval("var chosenAdjuster = adjuster"+item); 
eval("var chosenDensity = density"+item); 
var qty = (weight - chosenAdjuster) * chosenDensity; 
+1

它可能工作,但它是可怕的做法,不這樣做。建議你看看其他發佈的答案。 –

+0

出於好奇,爲什麼是可怕的做法?發佈的其他選項並沒有真正考慮到腳本是由php生成的,可能有一些產品有1或2個選項,但其他可能有更多。如上所示,讓PHP來生成代碼將是一個痛苦,相比這個小的2班輪。 –

+0

在評論的第二部分...如果添加更多選項,則不需要更改JavaScript中的任何內容。只需回調另一個「選項」,另一個匹配的「輸入」調整器和另一個「輸入」密度在HTML中,就像你正在爲你做的解決方案 –

0

我想說真正的伏特加幫了我很多理解,但我仍想不出出 - 你需要的細節只是選擇的產品或所有當您的下拉更改?無論如何這裏有東西

$(document).ready(function(){ 
    $("#item_1").change(function(){ 
    var item = $('#item_1').val();  // may be 3 or 4 or whatever depends on choice 
    var adjuster = $('#adjuster_'+ item).val(); // dynamic selector 
    var density = $('#density_'+item).val(); 
    var weight = $('#weight_'+item).val(); 
    var qty = (weight - adjuster)*density; // density is constant at a given temp. for given liquid why were you chaging this? dilluting? 
    $("#"+item+"_liveWeight").html("<b>"+ qty +"</b>"); 
    }); 
});