javascript - 选中后获取所有表行值

标签 javascript php html session checkbox

我有一个多列表,其中一列是复选框。如果您选中复选框然后按“结帐”按钮,它将获取指定的行并将其显示在电子邮件正文中。

我最初引入了前 100 行,以便为用户提供最少的信息。我还有一个搜索功能,用户可以搜索特定的行。虽然您可以在不同的搜索中进行操作,并且仍然通过 session 存储保持选中所有复选框,但当您点击“结帐”时,它仅显示已选中且当前在页面上可见的表格行。

因此,如果我搜索表格行并检查它,但随后通过单击主页返回到原始前 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:me@example.com"
             + "?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;
}

用于在整个 session 期间保持选中的复选框处于选中状态的 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');
    });
});

最佳答案

部分答案 - 太长,无法发表评论

来自您的earlier question ,我们了解每个选中的行都有一个 quantity_num 输入,并且您希望将其用户输入的值与固定行数据 locrp-code

看来 sessionStorage 仅保存行的选中状态,而不保存 quantity_num 值。如果是这样,则分页指示 quantity_num 值仅适用于当前显示的行 - 对于所有其他行,您只知道已检查行的 ID,而不知道其 quantity_num 值.

因此,首先要做的是确保存储“id|quantity_num”对(在 sessionStorage 中)。其他数据,locrp-code 等与 id 相关联,可以从服务器检索并在客户端或客户端使用(最好)在服务器端撰写电子邮件正文。

关于javascript - 选中后获取所有表行值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44500808/

相关文章:

php - 在 laravel 5.1 中制作访客跟踪器

PHP:使用 Golang 处理 websocket 连接

php - 声明与接口(interface)不兼容 (PHP)

javascript - 在 CSS 中创建进度轮

python - 如何识别并跟踪链接,然后使用 BeautifulSoup 从新网页打印数据

css - 2 列,1 列固定,另一种流体? (困境)

javascript - 使用 Regex Javascript 选择第一个目录

javascript - 从包含特定值的多维对象数组中返回数组对象

javascript - 动态变量名称语法

javascript - 如何使用 JavaScript 将 "XHR finished loading"消息存储在 Chrome 的控制台中?