2012-09-19 58 views
2

我有一個腳本,用於計算每個表單中的值並顯示計算值。在最後它也計算所有div的2表單中字段的名稱屬性

下面是HTML代碼中已經計算值:

<td> 
<div> 
<input name="r" class="rate" type="text" maxlength="255" size="5" value /> 
<input name="p" class="pack" type="text" maxlength="255" size="5" value /> 
<span class="amount"></span> 
</div> 
</td> 

<td> 
<div> 
<input name="r" class="rate" type="text" maxlength="255" size="5" value /> 
<input name="p" class="pack" type="text" maxlength="255" size="5" value /> 
<span class="amount"></span> 
</div> 
</td> 

的問題是,我希望把所有字段的形式,然後將它們提交到數據庫。 但是,所有div都包含名稱爲「r」和「p」的兩個輸入字段。

所以,我有點卡在這裏,因爲我不知道如何使名稱唯一或如何讓他們使用POST傳遞給數據庫。

這是計算腳本如下:

<script type="text/javascript">//<![CDATA[ 

//any time the amount changes 
$(document).ready(function() { 
    $('input[name=r],input[name=p]').change(function(e) { 
     var total = 0; 
     var $row = $(this).parent(); 
     var rate = $row.find('input[name=r]').val(); 
     var pack = $row.find('input[name=p]').val(); 

     total = parseFloat(rate * pack); 
     //update the row total 
     $row.find('.amount').text(total); 

     var total_amount = 0; 
     $('.amount').each(function() { 
      //Get the value 
      var am= $(this).text(); 
      console.log(am); 
      //if it's a number add it to the total 
      if (IsNumeric(am)) { 
       total_amount += parseFloat(am, 10); 
      } 
     }); 
     $('.total_amount').text(total_amount); 
    }); 
}); 

//isNumeric function Stolen from: 
//http://stackoverflow.com/questions/18082/validate-numbers-in-javascript-isnumeric 

function IsNumeric(input) { 
    return (input - 0) == input && input.length > 0; 
} 
//]]> 

</script> 
+3

它很大程度上取決於將接收此表單的服務器端腳本。瀏覽器沒有問題提交一個表單,其中有幾個輸入名稱相同;接收腳本可能會有。例如,PHP不支持共享相同名稱的輸入,並且只會保留最新的發生,_unless_您將輸入命名爲'r []'和'p []',在這種情況下,PHP會將它們視爲值的數組,您可以處理所有輸入的值。 – lanzz

+0

所以,例如,如果我使用名稱=「p []」並通過使用$ p = $ _ POST獲取值[POST] ['p []'];它應該工作? – lStoilov

+0

不,如果您使用'name =「p []」',在PHP端您會收到它爲'$ _POST ['p']',這將是一個數組。 [某些文檔](http://www.php.net/manual/en/language.variables.external.php)如何? – lanzz

回答

1

HTML:

<input type="text" name="r[]"> 
<input type="text" name="p[]"> 
<hr> 
<input type="text" name="r[]"> 
<input type="text" name="p[]"> 
<hr> 
<input type="text" name="r[]"> 
<input type="text" name="p[]"> 

PHP:即使沒有值有

for ($i = 0; $i < count($_POST['p']); $i++) { 
    $rate = $_POST['r'][$i]; 
    $pack = $_POST['p'][$i]; 
    // do something with $rate and $pack 
} 

由於瀏覽器提交的所有投入(已經被輸入),並且按照它們在HTML代碼中定義的順序來提交它們,你可以依賴它在兩個$_POST陣列中的元素將排隊並且相應的ratepack將在相應陣列中的相同索引處被接收。

+0

再次感謝lanzz。我剛剛找到了解決方案的更好方法。改爲在JScript中使用name屬性,我使用id,這樣我就可以爲每個輸入指定一個不同的名稱。 (輸入[id = ){ – lStoilov

+0

好吧,現在我設法把所有的東西都鏈接到數據庫,並且它工作正常,現在我面臨着另一個問題......我需要啓動腳本在鍵入值時所執行的字段的計算,但它不會計算你從一個數據庫中獲取的值什麼時候應該修改腳本中的值,以便在已經填充時計算所有的字段謝謝 – lStoilov

+0

我建議你爲此發佈一個單獨的問題無關的問題 – lanzz