2011-09-13 11 views
2

我剛開始使用jQuery。我一直在使用它的一件事是將行添加到作爲表單一部分的表中。提取動態創建的表單數據

當我添加一個新行時,我給所有的表單元素名稱,如'name_' + rowNumber。每增加一行,我就增加rowNumber

我通常也有一個刪除行按鈕。即使刪除了一行,rowNumber計數仍保持不變,以防止重複元素名稱。

提交表單時,我設置了一個隱藏的元素,以等於jQuery中的rowNumber值。然後在PHP中,我從1計數到rowNumber的值。然後對於每個值,我執行isset($_REQUEST['name'_ . index])。這是我如何提取jQuery中刪除行後剩下的表單元素。

這裏有沒有人有更好的技術來解決刪除行?

+1

不使用REQUEST,使用GET或POST。 – blejzz

+0

謝謝。我只是做了一點研究,理解了爲什麼。 –

回答

3

對於我們的一些較簡單的表格,我們使用字段名稱,如'name []',但對於JavaScript,它們需要一個可用的ID。

它確實增加了一些複雜性,因爲'name [0]'必須假定'detail [0]'是正確的元素。如果字段名稱以[類似

<input name="field[]" value="first value" /> 
<input name="field[]" value="second value" /> 

// is roughly the same as 

$_POST['field'][] = 'first value'; 
$_POST['field'][] = 'second value'; 
+0

所以我可以設置name =「field []」id =「field_1」這是你的意思嗎? –

+0

@你可以,但你爲什麼需要行ID呢? – DaveRandom

+0

一個項目我不得不計算特定列中所有元素的值。基本上,我在jQuery中使用了相同的技巧,正如我在PHP中使用的那樣獲取現有元素。 –

1

您可以通過執行foreach($ _ POST爲$ key => $ value)來提取所有行。

+0

你好,好主意。但是,表單通常包含表格外的具有唯一名稱的數據。 –

+0

無關緊要,您可以解析$ key值並查看它是哪個輸入。 $ key將會返回像「name_1」,「name_2」,「unique_1」等值,... – blejzz

+1

此方法將爲您提供所有表單字段,包括具有唯一名稱的表單字段。如果你只想爲表單元素使用這個方法(在循環中解析sans),你可以使用'foreach(array_keys($ _ POST,「name_」)作爲$ key)',然後使用'$ _POST [$ key]' – Drag0nR3b0rn

2

使用數組]結束,用於存放在您提交值

PHP將創建一個數組,並添加元素。所以請在客戶端計算行數,並將您的新元素命名爲name[]。這意味着$_POST['name']將是一個數組。

在服務器端這樣,你可以輕鬆地獲得行數(如果需要的話):

$rowcount = count($_POST['name']); 

...你可以通過在服務器端這樣的行中循環:

for ($i = 0; isset($_POST['name'][$i]; $i++) {} 
1

添加動態表單元素時,請使用數組命名方法。例如

<input type="text" name="textfield[]" /> 

當表單張貼textfield[]將是一個PHP數組,可以輕鬆地使用它即可。 當您移除一個元素時,請確保將其從HTML DOM中移除。

0

就像blejzz所暗示的,我認爲如果你使用$ _GET,那麼你可以循環所有發送的輸入,忽略已刪除的行。

foreach ($_GET as $k=>$v) { 
     echo "KEY: ".$k."; VALUE: ".$v."<BR>"; 
} 

我注意到,你提到「會計已刪除的行」;您可以包含一個隱藏的輸入,並在每次有人刪除一行時爲其添加一個唯一值。例如,輸入可容納逗號分隔值的行號:

<input type="hidden" value="3,5,8" id="deletions" /> 

,並在您的jQuery腳本:

$('.delete').click(function(){ 
     var num = //whatever your method for getting the row number 
     var v = $('#deletions').val(); 
     v = v.split(','); 
     v.push(num); 
     v = v.join(','); 
     $('#deletions').val(v); 
}); 

那麼你應該能夠知道哪些行被刪除(如果那就是你在找的東西)。

0

你可以使用POST或GET

提交後,您可以使用所有的表單元素的這個全自動。你不需要重新組織你的表單元素名稱。即使你不需要知道表單元素名稱。你

<form method="POST" id="fr" name="fr">.....</form> 

<?php 
if(isset($_POST['fr'])){ 
    foreach($_POST as $data){ 
      echo $data; 
    } 
} 
?> 

也應該看看這個 grafanimasyon.blogspot.com.tr/2015/02/veritabanndan-php-form-olusturucu.html

這是一個自動化的形式創造者calcutating數據庫表。您可以看到如何爲表單元素賦予名稱並使用它們。