1

より均一になるようにコードをクリーンアップしていました。echo コマンドにいくつかの JavaScript 関数を配置しました。それを行った後、機能が機能しなくなったことに驚きました。受け取ったエラーはありませんでした。機能が機能していないことに気付いたのは、ページを通過したときだけでした. 私はまだJavaScriptの初期段階にあるので、これが一般的なエラーかどうかはわかりませんが、それに関連するものは見つかりませんでした.

すべてのエコーを取り除き、問題が再発するまでゆっくりと追加することで、3 行目までトラブルシューティングを行いました。だから、私は何が間違っているのか分かりません。

関数の目的は、すべての上に灰色のオーバーレイを作成することです。その後、タスクを続行するかどうかを尋ねる小さな確認ボックスがポップアップ表示されます。

echo '<script type="text/javascript">';
                echo 'function showPopUp(el) {';
                    echo 'var cvr = document.getElementById("cover")';
                    echo 'var dlg = document.getElementById(el)';
                    echo 'cvr.style.display = "block"';
                    echo 'dlg.style.display = "block"';
                    echo 'if (document.body.style.overflow = "hidden") {';
                        echo 'cvr.style.width = "100%"';
                        echo 'cvr.style.height = "100%"';
                    echo '}';
                echo '}';
                echo 'function closePopUp(el) {';
                    echo 'var cvr = document.getElementById("cover")';
                    echo 'var dlg = document.getElementById(el)';
                    echo 'cvr.style.display = "none"';
                    echo 'dlg.style.display = "none"';
                    echo 'document.body.style.overflowY = ""';
                echo '}';
echo '</script>';

追加情報: ページ全体が php タグ内にあります。同じように動作している別の無関係な関数を見つけました。2 つが似ている唯一の方法は、どちらも var コマンドを使用し、すべて関数であることです。これが元になるのでしょうか?

4

3 に答える 3

6

おー。私の。神様。

あなたの会社の基準では、次のことは「許されています」ですか?

echo <<<HTML
<script type="text/javascript">
    function showPopUp(el) {
        var cvr = document.getElementById("cover")
        var dlg = document.getElementById(el)
        cvr.style.display = "block"
        dlg.style.display = "block"
        if (document.body.style.overflow = "hidden") {
            cvr.style.width = "100%"
            cvr.style.height = "100%"
        }
    }
    function closePopUp(el) {
        var cvr = document.getElementById("cover")
        var dlg = document.getElementById(el)
        cvr.style.display = "none"
        dlg.style.display = "none"
        document.body.style.overflowY = ""
    }
</script>
HTML;

あるいは単に:

<?php
// some PHP code
?>
<script type="text/javascript">
    function showPopUp(el) {
        var cvr = document.getElementById("cover")
        var dlg = document.getElementById(el)
        cvr.style.display = "block"
        dlg.style.display = "block"
        if (document.body.style.overflow = "hidden") {
            cvr.style.width = "100%"
            cvr.style.height = "100%"
        }
    }
    function closePopUp(el) {
        var cvr = document.getElementById("cover")
        var dlg = document.getElementById(el)
        cvr.style.display = "none"
        dlg.style.display = "none"
        document.body.style.overflowY = ""
    }
</script>
<?php 
//some MORE PHP code...

ifそうであれば、ステートメントで代入を使用していることに気付くでしょう。

if (document.body.style.overflow = "hidden")

する必要があります

if (document.body.style.overflow == "hidden")

注:この方法では、 javascript ブロック全体を 1 行に出力します。この方法で印刷する必要がある場合は、必要に応じて、印刷する各文字列にセミコロンまたは改行文字を追加する必要があります。

于 2012-08-16T20:43:36.437 に答える
2

生成された JavaScript は構文的に正しくありません。行がセミコロンでも改行でも終了していません。と置換する

echo 'var cvr = document.getElementById("cover");';

など。

また、<script>要素の末尾に改行が必要であることを漠然と思い出しました。PHP では、echo は最後に改行を生成せず、一重引用符で囲まれた文字列は \n のようなエスケープ シーケンスを許可しません。したがって、次のことを行う必要があります。

echo '<script type="text/javascript">'."\n";
于 2012-08-16T20:43:45.803 に答える
1

あなたのステートメントの問題は、echoスペース/セミコロンがないことです:

echo 'var cvr = document.getElementById("cover")';
                echo 'var dlg = document.getElementById(el)';
                echo 'cvr.style.display = "block"';

html では次のように表示されます。

var cvr = document.getElementById("cover")var dlg = document.getElementById(el)cvr.style.display = "block"

それはjavascriptでは意味がありません。

于 2012-08-16T20:43:52.790 に答える