1

我正在清理我的代码,使其更加统一。我在 echo 命令中放置了几个 javascript 函数。我惊讶地发现,在我这样做之后,这些功能就不再起作用了。我没有收到任何错误,只是当我浏览该页面时,我才注意到我的功能不再起作用。我还处于 javascript 的初级阶段,所以我不确定这是否是一个常见错误,但我找不到任何相关的东西。

我通过消除所有回声并慢慢添加更多回声,直到问题再次出现,将其排除在第三行。所以,我不确定我做错了什么。

这些功能的目的是在所有内容上进行灰色覆盖,然后会弹出一个小的确认框,询问您是否要继续执行该任务。

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 标签内,我发现另一个行为相同的不相关函数。两者相似的唯一地方是它们都使用 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 块打印在一行上。如果您必须以这种方式打印出来,则必须在需要时为打印的每个字符串添加分号或换行符。

于 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 回答