2016-10-14 10 views
0

HTMLを出力するPHPファイルがあります。PHPで作成されたHTMLがシーケンス外で作成される

構成を簡単にするため、私はsecond PHPファイルをfirst PHPファイルに入れました。私の最初のPHPファイルで

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

を私は次のようにHTML出力が生成されますが

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

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

を以下している:次のようにこのインクルードファイルは、単純に配列定義が含まれてい

<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は、(画像がFancyBoxがオンに開くことを背景ページ上にあり、それはfirst.php又はsecond.phpの一部ではない)画像のonClickイベントを介して、JavaScriptを介して開放される:

詳細については

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

、私はiframe内ではなく、このようfirst.php呼び出すまたは何がということです理由:私は(first.jsに通常の<SCRIPT>タグとfirst.phpに含まれている)している私のJavaScriptで

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

呼び出しページともやり取りするので、別のドキュメントオブジェクトを参照する必要はありません(私は思っています)。

基本的に他のすべてはfirst.phpで問題なく動作します - 読書やクッキーの設定などに動作していない唯一のもの呼び出すPHPのページ変数との相互作用が<select>とシーケンスのうち、これらの<options>タグの挿入をありますタグ。

+0

使用しているPHPのバージョンは? – Theraot

+0

- バージョン5.5.21 –

+0

これはかなり起こりにくい:)すべては期待どおりに動作するはずです。複雑なキャッシュや特別な設定を使用していますか?これは生の出力なのでしょうか、ブラウザの 'コンソール 'に表示されているものでしょうか?テストの実行を参照してください、それはすべてのPHPのバージョンで正常に動作します... https://3v4l.org/mHc2r –

答えて

0

これは私のHTMLマークアップのタイプミスではなく、PHPでの問題やOUT-によって引き起こされる奇数1であることが判明of-sequenceマークアップ生成。

私の開幕<select>のステートメントには迷路があります。すなわち

ブラウザは <select>はすぐ </select>が続いた検査官に見て、不正なHTMLの意味を理解するために最善を尽くしますので
<select id='mySelect' />. 

その後、私のオプションと私のコードからクロージング</select>が完全に削除されてたので<option>ステートメント選択の外にあったので無視されました。

奇妙なことに、これはFancBoxyの内部で呼び出されたときにのみ起こりました。ページを直接呼び出すと問題なく動作しました。

<select>の開封ミスを解消して問題を完全に解決しました。

0

ループを 'for'から 'foreach'に変更します。

+0

これは問題のタイプミスです。申し訳ありません。 –

1

あなたはforループを書きましたが、あなたはforeachループのように扱いました。

これは動作するはずです:

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

本当の質問は、OPがどのようにすべての出力を得たかである。そのコードはフラット・アウト・シンタックス・エラーです。「予期しない」( 'T_AS)'という致命的な構文解析エラーで死んでしまったはずです –

+0

申し訳ありませんが、質問のタイプミスとして、もちろん、foreachです... –

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> 
関連する問題