Печатайте каждую запись цикла на отдельной странице в ajax success - PullRequest
0 голосов
/ 04 сентября 2018

Как напечатать каждую запись цикла на отдельной странице, получая данные через массив ajax и PHP. т.е. Я хочу 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 токового выхода

1 Ответ

0 голосов
/ 04 сентября 2018

См. Этот пример https://jsfiddle.net/qa9wcuft/ в делении сделан разрыв. Это работает по крайней мере в Chrome версии 64.0.3282.167 и Firefox V 61.0.1. Проблема в следующем: https://jsfiddle.net/rz3896se/ это работает в Firefox, но не в 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. Мое предложение:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...