2013-08-03 37 views
0

我從PHP中的查詢結果創建了一個表。這是一個可編輯的表格,當用戶點擊保存時,我需要遍歷表格元素並將文本值存儲到數組中。從招聘#列的值必須是無論是在開始環,這樣我可以很容易地提取出來,然後用它當我插入值的每一次迭代完了。jQuery通過具有多種元素類型的表循環並獲取值

PHP創建表

<?php  

if(isset($_POST['aid'])) { 
    $aid = $_POST['aid']; 
    $projects = getProjects($db); 
    $members = getUserName($db);    
    try { 
     $project_info = $db->prepare(" 
      SELECT projects.id, 
        projects.project_name,     
        projects.pm,  
        projects.apm, 
        projects.est_start, 
        projects.est_end, 
        projects.contact,     
        projects.trips, 
        projects.tasks, 
        projects.perc_complete, 
        projects.bcwp, 
        projects.actuals, 
        projects.cpi, 
        projects.bcws, 
        projects.bac, 
        projects.comments, 
        projects.status, 
        projects.project_revenue, 
        projects.profit_margin, 
        projects.pm_perc, 
        projects.audited   
      FROM projects 
      WHERE account_id = ?       
     "); 

     $project_info->bindValue(1, $aid, PDO::PARAM_STR); 
     $project_info->execute();  

      echo "<table class='projects_contentTable'>";   
      echo "<th class='content_th'>" . "Job #" . "</th>"; 
      echo "<th class='content_th'>" . "Project Name" . "</th>"; 
      echo "<th class='content_th'>" . "PM" . "</th>"; 
      echo "<th class='content_th'>" . "APM" . "</th>"; 
      echo "<th class='content_th'>" . "Est. Start" . "</th>"; 
      echo "<th class='content_th'>" . "Est. End" . "</th>"; 
      echo "<th class='content_th'>" . "Contact" . "</th>"; 
      echo "<th class='content_th'>" . "Trips" . "</th>"; 
      echo "<th class='content_th'>" . "Tasks" . "</th>"; 
      echo "<th class='content_th'>" . "% Complete" . "</th>"; 
      echo "<th class='content_th'>" . "BCWP" . "</th>"; 
      echo "<th class='content_th'>" . "Actuals" . "</th>"; 
      echo "<th class='content_th'>" . "CPI" . "</th>";   
      echo "<th class='content_th'>" . "Comments" . "</th>"; 
      echo "<th class='content_th'>" . "Status" . "</th>";  
      echo "<th class='content_th'>" . "Project Revenue" . "</th>"; 
      echo "<th class='content_th'>" . "Profit Margin" . "</th>"; 
      echo "<th class='content_th'>" . "PM%" . "</th>"; 
      echo "<th class='content_th'>" . "Audited" . "</th>"; 


      while ($row = $project_info->fetch(PDO::FETCH_ASSOC)) {    
       echo "<tr>";        
       echo "<td class='content_td'>" . "<a href='#'>" . $row['id'] . "</a>" . "</td>"; 
       echo "<td class='projects_editable_content_td' contenteditable='true'>" . $row['project_name'] . "</td>"; 
       echo "<td class='projects_editable_content_td'>" . 
         "<select id='table_edit_project_pm'>" . 
          "<option value=''>" . $row['pm'] . "</option>" . 
          "<option>" . "-----" . "</option>"; 
         foreach($members as $key => $value) { 
          echo "<option value='".$key."'>" . $value . "</option>";    
         } 
       echo "</td>";    
       echo "<td class='projects_editable_content_td'>" . 
         "<select id='table_edit_project_apm'>" . 
          "<option value=''>" . $row['apm'] . "</option>" . 
          "<option>" . "-----" . "</option>"; 
         foreach($members as $key => $value) { 
          echo "<option value='".$key."'>" . $value . "</option>";    
         } 
       echo "</td>";    
       echo "<td class='projects_editable_content_td'>" . 
        "<input type='text' id='table_edit_project_start' value='". $row['est_start'] ."'>"; 
       echo "</td>";    
       echo "<td class='projects_editable_content_td'>" . 
        "<input type='text' id='table_edit_project_end' value='". $row['est_end'] ."'>"; 
       echo "</td>";    
       echo "<td class='projects_editable_content_td' contenteditable='true'>" . $row['contact'] . "</td>"; 
       echo "<td class='content_td'>" . $row['trips'] . "</td>"; 
       echo "<td class='content_td'>" . $row['tasks'] . "</td>"; 
       echo "<td class='content_td'>" . $row['perc_complete'] . "</td>"; 
       echo "<td class='content_td'>" . $row['bcwp'] . "</td>"; 
       echo "<td class='content_td'>" . $row['actuals'] . "</td>"; 
       echo "<td class='content_td'>" . $row['cpi'] . "</td>";    
       echo "<td class='projects_editable_content_td' contenteditable='true'>" . $row['comments'] . "</td>"; 
       echo "<td class='projects_editable_content_td'>" . 
         "<select id='table_edit_project_status'>" . 
          "<option value=''>" . $row['status'] . "</option>" . 
          "<option>" . "-------" . "</option>" . 
          "<option>" . "On Hold" . "</option>" . 
          "<option>" . "In Progress" . "</option>" . 
          "<option>" . "Open" . "</option>" . 
          "<option>" . "Complete" . "</option>" . 
         "</select>"; 
       echo "</td>"; 
       echo "<td class='content_td'>" . $row['project_revenue'] . "</td>"; 
       echo "<td class='content_td'>" . $row['profit_margin'] . "</td>"; 
       echo "<td class='content_td'>" . $row['pm_perc'] . "</td>"; 
       echo "<td class='projects_editable_content_td'>" . 
        "<input type='checkbox' id='table_edit_project_audited'>"; 
       echo "</td>";    
       echo "</tr>";    
      } 
      echo "</table>";     
    } catch(PDOException $e) { 
     die($e->getMessage()); 
    } 
} else {  
    echo 'could not load projects table'; 
} 

?> 

現在我使用的是目前獲得此數據的代碼看起來像這樣

jQuery的

$('.projects_editable_content_td, .projects_contentTable td:nth-child(3) a').each(function() { 
    saveEdits.push($(this).text()); 
}); 

// then alert the values using this loop 
$.each(saveEdits, function(index, value) { 
    alert(index + ': ' + value); 
}); 

當這個循環遍歷我我在saveEdits [0]和saveEdits [1]上得到了Job#中的值,然後我就完成了[選擇]元素的[選項]值。我知道這是因爲我不知何故需要將「選項:選中」合併到此循環中。無論如何,我的循環是一團糟,經過幾個小時的搞亂,我無法得到這個東西的工作。

因此,我需要循環遍歷每個tr,從tr中的每個td元素獲取文本值,並將作業#列中的值存儲在循環迭代的開始或結束處的每個處。

任何幫助表示最欣賞

+0

你爲什麼不直接提交表單呢? –

+0

@koala_dev它不是一種形式。這是一個可編輯的表格。可以這麼說,外觀就是excel電子表格的外觀。然而,把它變成一種形式,這是我沒有想到的。如果您有基於表單的解決方案,請將其作爲答案。我非常樂意試一試 –

+0

您的意思是您想遍歷每個,並且在每個內您想要遍歷中的​​?這會給你一個方法來獲取每次傳球的作業#欄。或者我誤解了你? – GreatBigBore

回答

1

如果我理解正確,我相信這會起作用,或者至少是非常喜歡它的東西。每次迭代一行,對於每一行,獲取< td> s中缺少< select> s的文本,並從選定的<選項> s中獲取文本。順便說一下,不要忘記在你的PHP中添加</select>,並且添加<add和<tbody>並不是一個壞主意。乾杯。

$('tbody tr').each(function() { 
    $('td:not(:has(select)),option:selected').each(function() { 
     saveEdits.push($(this).text()); 
    }); 
}); 
+0

非常感謝你,當我回到家時, –

1

如果你把一個額外的類像id_cell特定的細胞這會給你的每一行的第一個單元格的內容。

PHP:

while ($row = $project_info->fetch(PDO::FETCH_ASSOC)) {    
    echo "<tr>";        
    echo "<td class='content_td id_cell'>" . "<a href='#'>" . $row['id'] . "</a>" . "</td>"; 

的jQuery:

$(".projects_contentTable tr").each(function(){ 
    $(this).find('.id_cell'); 
}); 

如果你想獲得你的確切ID在該單元格,你可以這樣做:

var id = $(this).find('.id_cell').find('a').text(); 
如果

當然,但是你想要的,因爲我真的無法得到你的問題!

+0

此表將有很多行,我需要通過每個tr,並獲取每個td的內容與projects_content_editable_td類。我創建它們時不能給它們一個ID,因爲這是一個循環,它會給每個單元格tr同一個ID,這是不允許的,Ids必須是唯一的,這就是爲什麼我使用類的原因 –

+0

@i_me_mine檢查我的編輯,其他列也一樣,我的答案只限於Job列 – MahanGM

+0

我必須用完有一點我會在我回家的時候驗證一下,謝謝喲你這麼多 –