在foreach循环内打印div的内容

时间:2013-06-28 13:19:41

标签: php javascript

我在php中有一个foreach循环。现在我需要分别为每条记录打印div的内容,我现在的内容如下:

<script type="text/javascript">
    function printContent(div_id) {
        var DocumentContainer = document.getElementById("<?php echo $route->flightnum;?>");
        var html = '<html><head>' +
            '</head><body style="background:#ffffff;">' + DocumentContainer.innerHTML +
            '</body></html>';

        var WindowObject = window.open("", "PrintWindow", "width=1000,height=1000,top=0,left=0,toolbars=no,scrollbars=yes,status=no,resizable=yes");
        WindowObject.document.writeln(html);
        WindowObject.document.close();
        WindowObject.focus();
        WindowObject.print();
        //WindowObject.close();
        document.getElementById('print_link').style.display = 'block';
    }
</script>

然后我有以下div:

<div id="brief_print" style="margin-left: 15px">
.
.
.
.
.
</div>

也许这样的链接:

<a class="glow" style="text-decoration: underline;" href="javascript:printContent('<?php echo $route->flightnum;?>')"id='print_link'>Open in new window for printing</a>

我的问题是,当我点击链接时,我得不到任何回报。请告诉我我哪里错了。 感谢

整个代码:

<?php
foreach($allroutes as $route)
{
?>
<tr>
<td onclick="$('#details_<?php echo $route->flightnum;?>').toggle('slow')">P</td>
<td style="padding:5px 10px" ALIGN="center"><?php echo $route->depicao;?></td>
<td style="padding:5px 10px" ALIGN="center"><?php echo $route->arricao;?></td>
<td style="padding:5px 10px" ALIGN="center"><?php echo $route->aircraft; ?></td>
<td style="padding:5px 10px"ALIGN="center"><?php echo $route->distance;?></td>
</tr>
<tr >
<td colspan="14"><div align="center">
<table cellspacing="0" width="100%" id="details_<?php echo $route->flightnum;?>" style="display:none">
<tr><th style="padding:5px 10px"><div align="center">Flight Details</div></th></tr>
<tr><td>
<section>
<?php
if(!isset($_GET['newwindow']))
{
?>
<a class="glow" style="text-decoration: underline;" href="javascript:printContent('<?php echo $route->flightnum;?>')"id='print_link'>Open in new window for printing</a>
<script type="text/javascript">
function printContent(div_id)
{
var DocumentContainer = document.getElementById("<?php echo $route->flightnum;?>");
var html = '<html><head>'+'</head><body style="background:#ffffff;">'+ DocumentContainer.innerHTML+ '</body></html>';
var WindowObject = window.open("",  "PrintWindow","width=1000,height=1000,top=0,left=0,toolbars=no,scrollbars=yes,status=no,resizable=yes");
WindowObject.document.writeln(html);
WindowObject.document.close();
WindowObject.focus();
WindowObject.print();
//WindowObject.close();
document.getElementById('print_link').style.display='block';
}
</script>
<?php
}
?>
<div id="brief_print" style="margin-left: 15px">

<pre>
<b>Departing</b>    : <?php echo $schedule->depname ?>
<b>Arriving</b>     : <?php echo $schedule->arrname ?> 
<b>Equipment</b>    : <?php echo $schedule->fullname;?>
<b>Alternate</b>    : <?php echo $alternate1; ?> 
<b>Alternate</b>    : <?php echo $alternate2; ?> 
<b>Alternate</b>    : <?php echo $alternate3; ?> 

</pre>
</div>
</section>
</td></tr>
</table>    
</div>
<?php 
 }
?>

1 个答案:

答案 0 :(得分:0)

您的代码存在一些大问题。你好像不明白时间和地点发生了什么。让我试着解释一下。

当客户访问网站时,他们的浏览器会向您的托管服务器发送页面请求。您的主机服务器执行PHP代码,生成要发送到客户端浏览器的页面的源代码。因此,在PHP 完全执行之后,页面才会被发送回客户端的浏览器。此时尚未执行任何JavaScript代码。

一旦页面被发送到浏览器(并且PHP 完成),那就是JavaScript接管时的情况。 JavaScript在客户端执行。

所以,一旦你理解了这一点,你就会意识到你显然无法在不向服务器发出新请求的情况下从JavaScript调用PHP。


尝试在浏览器中打开您的页面并查看来源。您将看到为每个循环迭代定义一次JS函数printContent()。您还缺少第二个<tr><td>代码的结束标记(在上一个</td></tr>之后添加额外的</div>)。当您查看源代码以查看PHP代码生成的内容时,您可能会意识到所有其他问题。