2014-04-08 66 views
0

我有一個有一些文本字段的表單。文本字段可能會根據數據庫表增加或減少。如果數據庫中有3個倉庫,它將顯示3個文本框,其中包含可用數量作爲佔位符。現在用戶必須在每個框中輸入數量不超過佔位符中給定的數量。如果用戶輸入的值超過可用值(將顯示爲佔位符),我該如何進行驗證?問題是驗證應該根據foreach循環。我的代碼如下,如何在foreach裏面進行驗證

<?php 
if (!empty($ware_details)) { 
       foreach ($ware_details as $data) { 
        ?> 
        <div class="form-group"> 
         <label for="exampleInputEmail1"><?php echo $data->warehouse_name; ?></label> 
         <input type="number" id="return_pro" class="form-control" base_url="<?php echo site_url(); ?>" name="<?php echo $data->wh_warehouse_id;?>" placeholder="<?php echo $data->wh_product_qty; ?> Available"> 
         <div class="dataDrop"></div> 
<input type="hidden" id="quantity" value="<?php echo $data->wh_product_qty; ?>"/> 
        </div> 
      <?php } }?> 

這裏你看到文本框的數量取決於foreach循環。那我該如何驗證? Javascript或Ajax是好的。 我想是這樣的,

<?php foreach ($ware_details as $data) {?> 
<script> 
function check() 
{ 
    var stock = document.getElementById('quantity').value; 
     var return_stock = document.getElementById('return_pro').value; 
     if (parseFloat(stock) < parseFloat(return_stock)) 
     { 
      alert("Return product can't be more than total stock"); 
      document.getElementById('return_pro').focus(); 
      return false; 
     } 
     //alert(return_stock); 
     return false; 
} 

但我知道這是完全錯誤的。任何想法?

+0

如果沒有輸出任何東西到腳本(以使不同的功能),那麼你就需要多個腳本。 – Bergi

+0

你想要驗證什麼?我無法在表單中看到任何'#quantity'元素。如果你打算有多個,你不能使用一個ID,但應該使用一個類。然後,您可以選擇輸入元素並使用javascript進行迭代。 – Bergi

+0

請檢查。這是一個有問題的錯誤。我已更新代碼 –

回答

0

嘗試使用html5必需屬性。這組代碼可以幫助你。

<input type="number" 
     min="1" 
     max="<?php echo $data->wh_product_qty; ?>" 
     name="<?php echo $data->wh_warehouse_id;?>" 
     required="required" 
     placeholder="<?php echo $data->wh_product_qty; ?> Available" /> 
+0

但它在某些瀏覽器中不起作用 –

+1

它是一個乾淨的代碼。只需調整您的文檔類型以支持html5。 Chrome,safari,ie和opera都會支持,mozilla不支持。 http://www.w3schools.com/html/html5_form_input_types.asp –

0

你不能在文檔中多次使用一個id,它需要是唯一的。無論是使用類標識/組元素,或者列舉的ID:

<?php 
    $i = 0; 
    if (!empty($ware_details)) { 
     foreach ($ware_details as $data) { 
       ?> 
        <div class="form-group"> 
         <label for="exampleInputEmail1"><?php echo $data->warehouse_name; ?></label> 
         <input type="number" id="return_pro<?php echo $i; ?>" class="form-control" base_url="<?php echo site_url(); ?>" name="<?php echo $data->wh_warehouse_id;?>" placeholder="<?php echo $data->wh_product_qty; ?> Available"> 
         <div class="dataDrop"></div> 
<input type="hidden" id="quantity<?php echo $i; ?>" value="<?php echo $data->wh_product_qty; ?>"/> 
        </div> 
      <?php 
      $i++; 
     } }?> 
<script> 
function check(i) { 
    var stock = document.getElementById('quantity'+i).value; 
     var return_stock = document.getElementById('return_pro'+i).value; 
     if (parseFloat(stock) < parseFloat(return_stock)) 
     { 
      alert("Return product can't be more than total stock"); 
      document.getElementById('return_pro'+i).focus(); 
      return false; 
     } 
     //alert(return_stock); 
     return false; 
} 
// then in the validation trigger: 
    for (var i=0; i< <?php echo $i; ?>; i++) 
     check(i); 
+0

您在最後幾行代表什麼意思? –

+0

我的意思是在哪裏給這些行? –

+0

無論你之前(在表單提交處理程序中?)調用'check()',你現在都需要用每個表單的輸入號碼 – Bergi