0

我在 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 
 }
?>
4

1 回答 1

0

您的代码存在一些大问题。你似乎不明白何时何地发生了什么。让我试着解释一下。

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

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

所以,一旦你理解了这一点,你就会意识到如果不向服务器发出新的请求,你显然不能从 JavaScript 调用 PHP。


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

于 2013-06-28T20:56:55.600 回答