使用javascript </c:foreach>分别打印<c:foreach>的每个循环

时间:2013-03-07 22:05:05

标签: javascript jquery

目前我正在使用以下代码打印整个页面的打印图标:

<a href="javascript:window.print()">
<img src="images/printIcon.gif" alt="Print the Records" width="40" height="40" border="0" /> 
</a>

我正在阅读JSP中的对象列表,并使用<c:foreach>显示对象详细信息。 我想在每个对象的详细信息旁边显示一个打印图标,并在单击它时打印(到外部打印机)单个对象的详细信息。整个页面都是单一的。

我不确定是否可以这样做。我可以使用某种ID来控制每个循环吗?

编辑:

示例:

  <c:forEach var="case" items="${distributions}">
     <table>
        <tr> 
            Print case details
        </tr>
     </table>
  </c:foreach>

如果我有10个发行版,我会得到10个表,所以想要在每个表旁边打印一个图标,当点击它时,只打印该表。

3 个答案:

答案 0 :(得分:2)

我没有做过以下但理论上它应该有效:

1)定义一个打印样式表,其中包含:

body.detail-print .detail-item{display:none}
body.detail-print .detail-item.current{display:block}

2)定义一个事件监听器,例如用jQuery

$(".detail-item .print").click(function(e) {
    $("body").addClass("detail-print");
    $(this).closest(".detail-print").addClass("current");
    window.print();
});

这应该只打印打印样式表中可见的内容。

我在这里看到的唯一问题是:如果有人想要之后打印整个页面,浏览器将只打印最后选择的项目。您可以使用setTimeout重置类。我现在没有更好的主意......

答案 1 :(得分:0)

在您的块中,您可以将数据放入td,然后使用this post中描述的方法打印该td的内容。

<script type="text/javascript">
$(function(){
 $(".printable").each(function(){
   var $td = $(this);
   var $printIconTD = $('<td><img src="images/printIcon.gif" alt="Print the Records" width="40" height="40" border="0" /></td>');
   $td.parent().append($printIconTD);
   $printIconTD.click(function(){
        Popup($td.html());
   });

});
});
</script>

....

 <c:forEach var="case" items="${distributions}">
 <table>
    <tr> 
        <td class="printable">Print case details</td>
    </tr>
 </table>

这个解决方案唯一的问题是上帝,每个人都禁用了弹出窗口,因此您必须在页面上发布通知,让用户知道

答案 2 :(得分:0)

与建议的不同之处在于重新加载仅显示所选对象的页面,然后调用打印机对话框(例如,在文档加载时)。因此,对象旁边的打印机图标可以链接到同一页面,并传递一个您要打印的参数和要打印的对象的ID。