PHP 创建的 HTML 是乱序创建的
HTML created by PHP is created out of sequence
我有一个 PHP 文件输出一些 HTML.
为了便于配置,我有一个 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>
它呈现为一个空的 select 下拉菜单,下面显示了选项的文本!
我敢肯定这是一件愚蠢而简单的事情,因为我敢肯定我以前做过很多次都没有问题...
[更新]
经过调查发现,只有当我在 FancyBox 中显示 first
PHP 页面时才会发生这种情况 - 当我直接加载它时,选项包含在 <select>
中你会期望。
FancyBox是通过JavaScript通过图像的onClick事件打开如下(图像在FancyBox打开的背景页面上,它不是first.php或[的一部分=54=]):
<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>
标签顺序不一致。
将循环从 'for' 更改为 'foreach'。
你写了一个 for
循环,但你把它当作一个 foreach
循环。
这应该有效:
<? foreach ($myArray as $keyString=>$valueString) { ?>
<option value='<?= $keyString; ?>'><?= $valueString; ?></option>
<? } ?>
试试这个:
<?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>
结果证明这是一个奇怪的问题,是我的 HTML 标记中的拼写错误造成的,而不是 PHP 或乱序标记生成的问题。
我的开头 <select>
语句中有一个杂散的 /。即
<select id='mySelect' />.
因为浏览器会尽力理解格式错误的 HTML,在检查器中查看 <select>
后紧跟 </select>
然后是我的选项和结束 </select>
从我的代码中被完全删除,因此 <option>
语句在 select 之外,因此被忽略。
不过,奇怪的是,这只发生在 FancBoxy 内部调用时,当直接调用页面时它没有问题!
删除开头 <select>
语句中错误放置的 / 完全解决了问题。
我有一个 PHP 文件输出一些 HTML.
为了便于配置,我有一个 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>
它呈现为一个空的 select 下拉菜单,下面显示了选项的文本!
我敢肯定这是一件愚蠢而简单的事情,因为我敢肯定我以前做过很多次都没有问题...
[更新]
经过调查发现,只有当我在 FancyBox 中显示 first
PHP 页面时才会发生这种情况 - 当我直接加载它时,选项包含在 <select>
中你会期望。
FancyBox是通过JavaScript通过图像的onClick事件打开如下(图像在FancyBox打开的背景页面上,它不是first.php或[的一部分=54=]):
<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>
标签顺序不一致。
将循环从 'for' 更改为 'foreach'。
你写了一个 for
循环,但你把它当作一个 foreach
循环。
这应该有效:
<? foreach ($myArray as $keyString=>$valueString) { ?>
<option value='<?= $keyString; ?>'><?= $valueString; ?></option>
<? } ?>
试试这个:
<?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>
结果证明这是一个奇怪的问题,是我的 HTML 标记中的拼写错误造成的,而不是 PHP 或乱序标记生成的问题。
我的开头 <select>
语句中有一个杂散的 /。即
<select id='mySelect' />.
因为浏览器会尽力理解格式错误的 HTML,在检查器中查看 <select>
后紧跟 </select>
然后是我的选项和结束 </select>
从我的代码中被完全删除,因此 <option>
语句在 select 之外,因此被忽略。
不过,奇怪的是,这只发生在 FancBoxy 内部调用时,当直接调用页面时它没有问题!
删除开头 <select>
语句中错误放置的 / 完全解决了问题。