PHP创建的HTML不按顺序创建

时间:2016-10-14 14:00:45

标签: php html fancybox

我有一个输出HTML的PHP​​文件。

为了便于配置,我有一个second PHP文件,该文件包含在first PHP文件中。这个包含的文件只包含一个数组定义,如下所示:

<?
$myArray = array("key1"=>"value 1","key2"=>"value 2","key3"=>"value 3");
?>

在我的第一个PHP文件中,我有以下

<? include("second.php"); ?>

<label>Select here:
<select id='mySelect'>
<? foreach ($myArray as $keyString=>$valueString) { ?>
    <option value='<?= $keyString; ?>'><?= $valueString; ?></option>
<? } ?>
</select>
</label>

然而,HTML输出生成如下:

<label>Select here:
<select id='mySelect'>
</select>
<option value='key1'>value 1</option>
<option value='key2'>value 2</option>
<option value='key3'>value 3</option>
</label>

使用下面显示的选项文本呈现为空的选择下拉列表!

我确信这是一件愚蠢而简单的事情,因为我确信我之前已多次这样做而没有任何问题......

[更新]

经过调查后发现只有当我在FancyBox中显示first PHP页面时才会发生这种情况 - 当我直接加载它时,<select>中的选项会像您期望的那样包含在内。

FancyBox通过JavaScript通过图像的onClick事件打开如下(图像位于FancyBox打开的背景页面上,它不是first.php或second.php的一部分):

<img src="myImage.png" alt="my image" onClick="openFirstPHP();">

在我的JavaScript中(first.js包含在first.php中,其中包含通常的<SCRIPT>标记):

function openFirstPHP() {
    $.fancybox({
        href: "/first.php",
        type: "ajax",
        afterShow: function() {
            // do some setting of some radio buttons' states - which works fine
        }
    });
}

有关信息,我之所以这样称呼first.php而不是iFrame,或者它与调用页面交互的原因是什么,因此避免我必须引用不同的文档对象(我认为)。

基本上其他所有内容在first.php中都没有问题 - cookie的读取和设置,与调用PHP页面变量的交互等。唯一不起作用的是插入这些<options>标签与<select>标签不一致。

4 个答案:

答案 0 :(得分:1)

您编写了一个for循环,但您将其视为foreach循环。

这应该有效:

<? foreach ($myArray as $keyString=>$valueString) { ?>
    <option value='<?= $keyString; ?>'><?= $valueString; ?></option>
<? } ?>

答案 1 :(得分:0)

从&#39;更改你的循环。到了&#39; foreach&#39;。

答案 2 :(得分:0)

试试这个:

<?php include_once("second.php");
 ?>

<label>Select here:
<select id='mySelect'>
<?php foreach ($myArray as $keyString=>$valueString) { ?>
    <option value='<?php echo $keyString; ?>'><?php echo $valueString; ?></option>
<?php } ?>
</select>
</label>

答案 3 :(得分:0)

由于我的HTML标记中存在拼写错误而不是PHP或无序标记生成问题而导致这种情况变得奇怪。

我的开场<select>声明中有一个迷路。即。

<select id='mySelect' />.

由于浏览器会尽力理解格式错误的HTML,因此查看检查员<select>后紧跟</select>,然后我的选项和我的代码中的结束</select>是被完全删除,因此<option>语句不在select中,因此被忽略。

奇怪的是,这只发生在FancBoxy内部调用时,直接调用页面时它没有问题!

删除错误放置/在开头<select>语句中完全解决了问题。