2017-06-12 50 views
1

我有一個多列表格,其中一列是複選框。如果您選中一個複選框,然後按下「簽出」按鈕,它將採用指定的行並將其顯示在電子郵件的正文中。檢查時獲取所有表格行值

我最初引入前100行以將信息保持在最低限度。我也有搜索功能,用戶可以搜索特定的行。儘管您可以在不同的搜索中進行操作,並且仍然保留所有的複選框與會話存儲進行檢查,但當您點擊「Checkout」時,它只會顯示已檢查並且當前在頁面上可見的表格行。

因此,如果我搜索了一個表格並檢查了它,然後通過單擊回到原來的前100行,那麼該行就不會顯示在電子郵件上,因爲它沒有顯示在前100位。

我該如何解決這個問題,並顯示所有已檢查的行,無論它們在頁面上是否可見?

HTML:

<section id="checkout-btn"> 
<button id="checkout" name="order" onclick="sendMail(); return false">Checkout</button> 
</section> 

<br> 

<table id="merchTable" cellspacing="5" class="sortable"> 
    <thead> 
     <tr class="ui-widget-header"> 
      <th class="sorttable_nosort"></th> 
      <th class="sorttable_nosort">Loc</th> 
      <th class="merchRow">Report Code</th> 
      <th class="merchRow">SKU</th> 
      <th class="merchRow">Special ID</th> 
      <th class="merchRow">Description</th> 
      <th class="merchRow">Quantity</th> 
      <th class="sorttable_nosort">Unit</th> 
      <th style="display: none;" class="num">Quantity #</th> 
     </tr> 
    </thead> 
    <tbody> 

     <?php foreach ($dbh->query($query) as $row) {?> 

     <tr> 
      <td class="ui-widget-content"><input type="checkbox" class="check" name="check" id="checkid-<?php echo intval ($row['ID'])?>"></td> 
      <td class="loc ui-widget-content" data-loc="<?php echo $row['Loc'] ?>"><input type="hidden"><?php echo $row['Loc'];?></td> 
      <td class="rp-code ui-widget-content" align="center" data-rp-code="<?php echo $row['Rp-Code'] ?>" id="rp-code-<?php echo intval ($row['Rp-Code'])?>"><?php echo $row['Rp-Code'];?></td> 
      <td class="sku ui-widget-content" data-sku="<?php echo $row['SKU'] ?>" id="sku-<?php echo intval ($row['SKU'])?>"><?php echo $row['SKU'];?></td> 
      <td class="special-id ui-widget-content" data-special-id="<?php echo $row['Special-ID'] ?>" align="center" id="special-id-<?php echo intval ($row['Special-ID'])?>"><?php echo $row['Special-ID'];?></td> 
      <td class="description ui-widget-content" data-description="<?php echo htmlspecialchars($row['Description']) ?>" id="description-<?php echo intval ($row['Description'])?>"><?php echo $row['Description'];?></td> 
      <td class="quantity ui-widget-content" data-quantity="<?php echo $row['Quantity'] ?>" align="center" id="quantity-<?php echo intval ($row['Quantity'])?>"><?php echo $row['Quantity'];?></td> 
      <td class="unit ui-widget-content" data-unit="<?php echo $row['Unit'] ?>" id="unit-<?php echo intval ($row['Unit'])?>"><?php echo $row['Unit'];?></td> 
      <td style="display: none;" class="quantity_num ui-widget-content"><input type="textbox" style="width: 100px;" class="spinner" id="spin-<?php echo intval ($row['ID'])?>"></td> 
     </tr> 

    <?php } ?> 

    </tbody> 
</table> 

的JavaScript,在數據彙集了來自表以電子郵件:

function sendMail() { 
    var link = "mailto:[email protected]" 
      + "?subject=" + encodeURIComponent("Order") 
      + "&body="; 

    var body = ''; 

    $('table tr input[name="check"]:checked').each(function(){ 
    var current_tr = $(this).parent().parent(); 

    var data = current_tr.find('.loc').data('loc'); 
    body += encodeURIComponent(data) + '\xa0\xa0'; 

    var data =current_tr.find('.rp-code').data('rp-code'); 
    body += encodeURIComponent(data) + '\xa0\xa0'; 

    var data =current_tr.find('.sku').data('sku'); 
    body += encodeURIComponent(data) + '\xa0\xa0'; 

    var data =current_tr.find('.special-id').data('special-id'); 
    body += encodeURIComponent(data) + '\xa0\xa0'; 

    var data =current_tr.find('.description').data('description'); 
    body += encodeURIComponent(data) + '\xa0\xa0'; 

    var data =current_tr.find('.quantity').data('quantity'); 
    body += encodeURIComponent(data) + '\xa0\xa0'; 

    var data =current_tr.find('.unit').data('unit'); 
    body += encodeURIComponent(data) + '\xa0\xa0'; 

    var data =current_tr.find('.spinner').data('spinner'); 
    body += encodeURIComponent(data) + '\xa0\xa0'; 

    body += '%0D%0A'; 

    }); 

    body += ''; 
    link += body; 
    console.log(link); 

    window.location.href = link; 
} 

JavaScript來保存選中的複選框,選中,在整個會議期間:

$(function(){ 
    $(':checkbox').each(function() { 
     var $el = $(this); 
     $el.prop('checked', sessionStorage[$el.prop('id')] === 'true'); 
    }); 

    $('input:checkbox').on('change', function() { 
     var $el = $(this); 
     sessionStorage[$el.prop('id')] = $el.is(':checked'); 
    }); 
}); 
+0

如果您在服務器上的服務器CHECK上分頁。如果您希望它們可用於PHP,則將會將選中的框存儲在會話中而不是sessionStorage中。也從服務器發送郵件,並非所有的客戶端都安裝了有效的電子郵件處理程序 – mplungjan

+0

感謝您的回覆!你能夠提供它可能看起來像什麼大綱,以便我可以更好地形象化它? – Rataiczak24

回答

0

部分回答 - 太長的評論

從你earlier question,據我們瞭解,每個選中的行都有一個quantity_num輸入要包含在電子郵件正文旁邊的固定行數據,locrp-code等其用戶輸入的值

它會出現sessionStorage只保存行的已檢查狀態,而不是quantity_num值。如果是這樣,則分頁規定quantity_num值僅適用於當前顯示的行 - 對於所有其他行,您只知道已檢查行的標識,而不知道它們的quantity_num值。

因此,首先要做的是確保存儲「id | quantity_num」對(在sessionStorage中)。其他數據,locrp-code等與id相關聯,並且可以從服務器檢索並且用於客戶端或者(優選地)服務器端組成電子郵件主體。

+0

嗨,Roamer ...我能夠獲得一些更新,但仍然有相同的問題,並真的與它掙扎...如果你看到這一點,並有任何時間我會發布鏈接,如果你想採取看它!謝謝! https://stackoverflow.com/questions/44661448/get-checked-table-rows-using-session-storage-to-display-in-email – Rataiczak24

+0

我看到你刪除了你的[後面的問題](https:// stackoverflow .COM /問題/ 44661448 /獲取覈對表 - 行 - 使用會話存儲到顯示在電子郵件)。這是否意味着你解決了這個問題?如果沒有,我有一些想法可能會有所幫助。 –

+0

對不起,新鏈接...仍在努力弄清楚! https://開頭計算器。COM /問題/ 44676816/GET-所有表列值,通過會話存儲 – Rataiczak24