#php #html #fancybox
#php #HTML #fancybox
Вопрос:
У меня есть 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>
который отображается как пустой выпадающий список выбора с текстом параметров, показанных под ним!
Я уверен, что это что-то глупое и простое, поскольку я уверен, что делал это много раз раньше без проблем…
[Обновление]
После расследования выясняется, что это происходит только тогда, когда я отображаю страницу first
PHP в FancyBox — когда я загружаю ее напрямую, параметры включаются в <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 или что-то еще, заключается в том, что он также взаимодействует с вызывающей страницей, и поэтому мне не нужно ссылаться на другой объект document (я думаю).
В основном все остальное работает без проблем first.php
— чтение и настройки файлов cookie, взаимодействие с вызывающими переменными страницы PHP и т. Д. Единственное, что не работает, это вставка этих <options>
тегов из последовательности с <select>
тегами.
Комментарии:
1. Какую версию PHP вы используете?
2. Это практически невозможно 🙂 Все должно работать так, как ожидалось. Используете ли вы какой-либо сложный кэш или специальную конфигурацию? Это необработанный вывод или что-то, что вы видите в
console
своем браузере? Смотрите Выполнение теста, он отлично работает во всех версиях php… 3v4l.org/mHc2r3. Я согласен.. вот почему я так озадачен этим. Это то, что я вижу в браузере и с помощью Firefox developer inspector. Никакого сложного кэша или конфигурации, и я делаю то же самое во многих других PHP-скриптах на том же сервере. Это действительно озадачивает меня.
4. Ооооочень …. может быть, я что-то нашел. Эта проблема возникает только тогда, когда
first
страница загружается в оверлей fancyBox — загрузка страницы напрямую работает, поэтому процесс загрузки fancyBox, похоже, сбивает с толку…5. @FatMonk Это fancyBox ? Если это так, и проблема возникает только с ним, вам следует добавить фрагмент, который вы используете для его вызова, и тег fancybox в вопросе. Редактировать: я не понимаю, как это может повлиять на содержимое.
Ответ №1:
Вы написали for
цикл, но вы обработали его как foreach
цикл.
Это должно сработать:
<? foreach ($myArray as $keyString=>$valueString) { ?>
<option value='<?= $keyString; ?>'><?= $valueString; ?></option>
<? } ?>
Комментарии:
1. Реальный вопрос должен заключаться в том, как OP вообще получил какой-либо вывод. Этот код является синтаксической ошибкой и должен был умереть с
unexpected 'as' (T_AS)
фатальной ошибкой синтаксического анализа2. Извините, это опечатка в вопросе.. это был, конечно, foreach …
Ответ №2:
Измените свой цикл с ‘for’ на ‘foreach’.
Комментарии:
1. извините, это была опечатка.
Ответ №3:
Попробуйте это:
<?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>
Ответ №4:
Это оказалось странным, вызванным опечаткой в моей HTML-разметке, а не проблемой с PHP или генерацией разметки вне последовательности.
В моем вступительном <select>
заявлении было отклонение / . т.е.
<select id='mySelect' />.
Поскольку браузеры делают все возможное, чтобы разобраться в искаженном HTML, при просмотре в инспекторах <select>
сразу же последовал </select>
затем мои параметры, и закрытие </select>
из моего кода полностью отбрасывалось, поэтому <option>
операторы находились за пределами выбора и поэтому игнорировались.
Как ни странно, это происходило только при вызове внутри FancBoxy, при прямом вызове страницы она работала без проблем!
Удаление неправильно размещенного / в <select>
инструкции openeing полностью решило проблему.