【问题标题】:Echo Javascript function in PHP to display modal not displaying properlyPHP中的Echo Javascript函数显示模式无法正确显示
【发布时间】:2013-08-25 18:09:22
【问题描述】:

我在这里有一个代码,旨在在未填充文本框时显示 Javascript 模式(单击发送按钮时,它将检查未填充的文本框和复选框并显示模式,如果一切正常,它将发送一个电子邮件...我首先在文本框上工作)。但是我在正确显示模态时遇到了一些问题。好像当我使用 display: block 时,它将与表单中的其他对象一起显示。但是当我将其设置为显示时:无,即使单击发送按钮后也不会显示任何内容。

这是 modal 的 CSS:

 #overlay {
     display: block;
     position: absolute;
     left: 0px;
     top: 0px;
     width:100%;
     height:100%;
     text-align:center;
     z-index: 800;
    }
 #overlay div {
     width:800px;
     margin: 100px auto;
     background-color: none;
     border:none;
     padding:15px;
     text-align:center;
    }
 body {
     height:100%;
 width:100%;
     margin:0;
     padding:0;
 overflow:auto;
}

HTML:

<div id="overlay">
<div>
      <img src="images/NoUsername.png" alt="module" style="width:469px; height:345px;">
      <p>[<a href='#' onclick='overlay()'>close</a>]</p>
 </div>

我从http://raventools.com/blog/create-a-modal-dialog-using-css-and-javascript/得到这些代码

这里是检查文本框的 PHP 代码:

if ($username == "") {

    echo
    "<script type=\"text/javascript\"> 
    function overlay() {
        el = document.getElementById(\"overlay\");
        el.style.visibility = (el.style.visibility == \"visible\") ? \"hidden\" : \"visible\";
    }</script>";
} 

我在这里尝试使用双引号和单引号,但没有任何反应。我认为问题出在我的 CSS 中。请随时编辑我的代码。提前感谢您的帮助!

【问题讨论】:

  • 如果您不想将该 HTML/JS 放在不同的文件中并包含它,那么您可以使用 ?&gt; &lt;html&gt; &lt;?php 将其混合在一起。无论哪种方式,您都摆脱了所有那些转义的双引号。您也可以在整个字符串周围使用单引号,但不要这样做,混合 PHP 和 HTML/JS 是不好的做法。
  • 嗨,塞尔吉!我试过使用 ?>
  • 或者如果我把它放在单独的javascript中,我该怎么做才能调用该函数?
  • 如果需要,请使用echo '&lt;script type="text/javascript"&gt;... el = document.getElementById("overlay"); ...&lt;/script&gt;'; 注意单引号。然后你可以在里面使用未转义的双引号。如果这不起作用,那么 JavaScript 本身就有问题。
  • 我尝试了您的建议,我认为它确实有效。但我现在的问题是我的 CSS 设置为 display: none (我也尝试过可见性: hidden),以便首先隐藏模式。但即使 z-index 设置为 800,它也不会显示单击按钮的时间。希望您也能帮助我。对不起,如果我在这里有很多问题。谢谢:)

标签: php javascript html css


【解决方案1】:

正如我所评论的,在直接学习 PHP 和 JavaScript 等编程之前,您应该多学习一点 CSS 和 HTML。在您真正从中学到有意义的东西之前,您的问题可能会被标记为低质量。

我认为visibility 属性不适合您的需求,因为它会在 DOM 中为元素分配空间,即使它是隐藏的。我还认为您应该选择通过 PHP(服务器端)通过 JavaScript(客户端)显示模式,因为您现在正在做的事情变得非常混乱,对于新手来说更是如此。

我会将你的 CSS 修改为:

 #overlay {
     display: none; /* hidden if not overwritten by style="" attribute or javascript */
     position: fixed; /* fixed makes more sense here as it doesn't depend on the element's parents, search for it */
 ...

如果您选择通过 php 显示或隐藏模态框,则类似于

<div id="overlay" <?php if ($username == "") echo 'style="display: block;"' ?>>
<div>
      <img src="images/NoUsername.png" alt="module" style="width:469px; height:345px;">
...

或者,我认为最好的方法是完全使用 JavaScript(客户端),而不依赖于 php:

<script type="text/javascript">
  function show_modal() {
    el = document.getElementById("overlay");
    el.style.display="block";
  }
  function hide_modal() { // You'll want to use this for the close button
    el = document.getElementById("overlay");
    el.style.display="none";
  }
  function verify_elements() {
    el = document.getElementById("username");
    if (el.value == '') {
      show_modal(); // if the username is '', show'em the modal
      return false; // returning false makes sure the form isn't submited
    }
  }
</script>
<form action="" method="post" onsubmit="verify_elements()">
   <input name="username" id="username" value="" />
...

我希望它能帮助你走上正确的道路。但是,如果您真的想学习而不是永远复制和粘贴,那么您真的应该逐步进行:D

最好的问候!

【讨论】:

  • 嗨@Leonel!我正在尝试你的建议。我在哪里可以准确放置此代码?
    >
    我可以将它放在我的
  • 它替换了你的覆盖 div。尝试理解代码。此外,试试我给你的另一种选择!
  • 感谢莱昂内尔!我正在一一尝试,这样我就可以找到并了解更多信息。 :)
  • 我真的很难找出我的代码有什么问题。我尝试了您建议的前两个代码。但这对我不起作用。我还尝试用你的脚本替换我的 javascript,同时将它与旧 div 配对,但它不起作用。还有其他可能的方法吗?
【解决方案2】:

我认为你错过了调用添加到页面的功能:

if ($username == "") {

    echo
    "<script type=\"text/javascript\"> 
    function overlay() {
        el = document.getElementById(\"overlay\");
        el.style.visibility = (el.style.visibility == \"visible\") ? \"hidden\" : \"visible\";
    }
    overlay();
    </script>";
}

另外,我认为默认情况下应该隐藏叠加层:

#overlay {
    display: block;
    position: absolute;
    left: 0px;
    top: 0px;
    width:100%;
    height:100%;
    text-align:center;
    z-index: 800;
    visiblity: hidden;
}

【讨论】:

  • 点击超链接时调用该函数。
  • @krasimir - 我尝试设置使用 display:block 但问题是即使单击按钮也没有显示模式。
  • :) 那里的点击是为了关闭对话框。该链接包含一个标签 close 并且该 div 位于覆盖层内。抱歉@SergiuParaschiv,但请仔细检查代码。据我所知,这个想法是检查是否没有给出用户名以将一些js添加到显示弹出窗口的页面中。之后,通过单击关闭覆盖再次隐藏。
  • @user2659523 你所说的按钮被点击是什么意思。正如我刚刚在上面对我所说的,看起来这是一个关闭对话框的按钮。您应该提交表单,php 代码应该检查是否有用户名。如果不是,那么它会注入显示弹出窗口的 javascript。之后,通过单击关闭,您实际上隐藏了对话框。你的 js 逻辑也是这样工作的。
  • 另外你不需要设置 display: block,因为 div 默认是一个块元素。如果你想使用 display 而不是 visiblity 那就没问题了。 blocknone 将切换模式对话框。
猜你喜欢
相关资源
最近更新 更多
热门标签