【问题标题】:Print every record of loop in a separate page in ajax success在ajax成功的单独页面中打印每个循环记录
【发布时间】:2018-09-04 18:23:32
【问题描述】:

如何在单独的页面中打印每个循环记录,同时通过数组中的ajax和PHP获取数据。 IE 我希望每一页都有row1 数据,而row2 数据在一个单独的页面中的每条记录。 尝试以下脚本,但没有给出想要的结果。

var response = {
row1: [{group: 'Group A'}],
  row2: [
    {team: 'Team A', player: 'Jema', result: 43},
    {team: 'Team B', player: 'Deno', result: 34},
    {team: 'Team B', player: 'Niob', result: 56},
    {team: 'Team B', player: 'Skion', result: 49},
  ],
};

        $("#group").html(response.row1.group);

        var cats = {};
        response.row2.forEach(function(element) {
            cats[element.team] = cats[element.team] || [];
            cats[element.team].push(element);
        });

        Object.keys(cats).forEach(function(team) {
            let html = '';
            html = '<tr>';
            html += '<td>' + team + '</td>';
            html += '</tr>';
            $('table').append(html);

            // Loop through the results for this category
            cats[team].forEach(function(element) {
                var names = element.player;
                var result = element.result;

                html = '<tr>';
                html += '<td>' + names + '</td>';
                html += '<td><input type="text" value="' + result + '"></td>';
                html += '</tr>';
                $('table').append(html);
            });

            // Append the textarea at the end of the results
            html = '<tr>';
            html += '<td><textarea placeholder="textarea..."></textarea></td>';
            html += '</tr>';
            $('table').append(html);
        });
       var PrintThis = document.getElementById('print');
				var PrintStyle = '<style type="text/css">' + 
									'@media print{' +
									'.Break { page-break-after: always }' +
									'}' +
									'</style>';
				PrintStyle += PrintThis.innerHTML;
				myWin = window.open("");
				myWin.document.write(PrintStyle);
				myWin.print();
				myWin.close();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js"></script>
<div id="print">
<h1 id="group">
</h1>
   <table class="table bordered">
   <thead>
     <th>Name</th>
     <th>Result</th>
   </thead>
   <tbody>
     
   </tbody>
   </table>
	</div>

JSFIDDLE of current output

【问题讨论】:

    标签: javascript ajax loops printing page-break


    【解决方案1】:

    请参阅此示例https://jsfiddle.net/qa9wcuft/ div 中有一个中断。它至少在 chrome 版本 64.0.3282.167 和 Firefox V 61.0.1 中有效。问题是这样的:https://jsfiddle.net/rz3896se/ 它适用于 Firefox,但不适用于 chrome。 chrome 似乎不会破坏表格。所以我的建议是做不同的表格,并在中间放一个 div 中间有一个休息,就像这样https://jsfiddle.net/8L201zvw/

    您还要添加以下内容:.Break { page-break-after: always }.break 更好)这对于分隔页面是正确的,但您没有该类的任何元素。我的建议是你应该在页面中你想要的最后一个元素中添加class="break"(都小写更好),在这种情况下,我认为是这样的:

     html = '<tr class="break">';
     html += '<td><textarea placeholder="textarea..."></textarea></td>';
     html += '</tr>';
    

    这在 chrome 中不起作用。我的建议:

    【讨论】:

    • 试过了,不行,能不能用jsfiddle更新一下?
    • 这是您的建议jsfiddle.net/v5gbfmtc/31的更新。
    • 这个我试过了,还是有问题。我正在使用 Chrome,它是我的默认浏览器。我的项目离线,它依赖于 chrome。
    • 实际上,正如我在问题中提到的那样,我希望将循环( Team )的每条记录打印在单独的页面中,即第一页上的 Team A 和第二页上的 Team B 。我已经在循环内尝试了这个$("#print").append("&lt;div class='break'&gt;&lt;/div&gt;");,但它的打印第二页是空的。如前所述,我想将团队(团队 A、团队 B)分开,谢谢。jsfiddle.net/qa9wcuft/7
    • @SamDasti 我已经重写了整个代码并在两种浏览器中都可以使用看到这个jsfiddle.net/8L201zvw
    猜你喜欢
    • 2017-02-09
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 2020-08-30
    相关资源
    最近更新 更多