【问题标题】:Show floated div near a button在按钮中显示浮动 div
【发布时间】:2015-11-10 14:18:34
【问题描述】:

我试图在单击按钮时在按钮附近显示一个浮动 div,并在我点击其中的“关闭”跨度时隐藏该 div。这是我的代码:

    <style>
    #noteDiv {display:none; position: absolute;}
    </style> 

    <script>
    function showNote(e) {

      var x = 0, y = 0;
      if (!e) e = window.event;
      if (e.pageX || e.pageY) {
        x = e.pageX;
        y = e.pageY;
      }
      else if (e.clientX || e.clientY) {
        x = e.clientX + document.body.scrollLeft
          + document.documentElement.scrollLeft;
        y = e.clientY + document.body.scrollTop
          + document.documentElement.scrollTop;
      }
    var noteDiv = document.getElementById("noteDiv");
      noteDiv.style.display = "block";
      noteDiv.style.left = (x+20)+"px";
      noteDiv.style.top = (y)+"px";
    }

    function hideNote() {
      document.getElementById("noteDiv").style.display = "none";
    }
    </script>

 <div id='noteDiv'>
 <div style="margin: 5px; float: right; font-size: smaller"><span  onclick="hideNote()">Close</span></div><br clear="all">

<div>Note Content</div>
 </div>

    <?php
    echo "<button type ='button' onClick = 'showNote();'>Note</button>";
    ?>

它确实隐藏了 div,但是当我单击“Note”按钮时,noteDiv 不显示。

出了什么问题?

谢谢!迈克尔·拉兹洛。我想我发现了问题,但我不知道如何处理。

我相信这是javascript peice,因为如果我注释掉这部分:

if (e.pageX || e.pageY) {
  x = e.pageX;
  y = e.pageY;
 }
  else if (e.clientX || e.clientY) {
  x = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
  y = e.clientY + document.body.scrollTop  + document.documentElement.scrollTop;
  }

按钮效果很好(尽管位置在屏幕的左角,因为 x 和 y 为 0)。

我错过了什么吗?

对于Sunil的建议,我暂时把class部分去掉,把onClick改成onclick,现在回显好了,谢谢Sunil!

再次感谢 Michael Laszlo!是的,你是对的!我需要给按钮一个 ID,否则 e 无法传递给函数!现在我的代码也可以工作了!

我的页面上有很多这样的按钮,我需要生成一个 var 来验证它们,然后我认为它应该可以工作。如果有问题,应该是另外一个问题了,哈哈,关于php的。

非常感谢 Michael Laszlo 和 Sunil,您为按钮设置 id 和从浏览器检查代码的建议对您有很大帮助!我从你们那里学到了宝贵的东西!

【问题讨论】:

  • 您是否在浏览器的开发人员工具中检查了 html?这将告诉您 Note 按钮是否使用正确的 html 呈现。使用您的原始代码来获取它。然后很容易知道出了什么问题。
  • 您的问题是嵌入的 $classStr,它导致浏览器无法识别 onclick 属性,因此不会触发 onclick 的代码。
  • 在您的情况下,使用 $classDir 呈现不正确 html 的原因可能是 apache Web 服务器未正确配置 php。所以这实际上是一个 php 问题,而不是一个 JavaScript 问题。
  • 能贴一下req_COMP类的代码吗?这应该是某处定义的一些 CSS。您的类 CSS 可能存在一些问题。
  • 另外,查看呈现的脚本。可能是您的页面中的 JavaaScript 未正确呈现,因此无法识别 showNote 函数。

标签: javascript html


【解决方案1】:

问题是当showNote() 被调用时事件e 是未定义的。为确保将事件传递给showNote,请为按钮提供一个 ID 并在窗口加载时附加点击处理程序。

例如,您可以这样定义按钮:

<button id="noteButton" type="button">Note</button>

然后将其添加到您的 JavaScript:

window.onload = function () {
  document.getElementById('noteButton').onclick = showNote;
};

下面的sn-p演示了这种方法。

window.onload = function () {
  document.getElementById('noteButton').onclick = showNote;
};

function showNote(e) {
  var x = 0, y = 0;
  if (!e) e = window.event;
  if (e.pageX || e.pageY) { 
    x = e.pageX;
    y = e.pageY;
  } 
  else if (e.clientX || e.clientY) { 
    x = e.clientX + document.body.scrollLeft
      + document.documentElement.scrollLeft;
    y = e.clientY + document.body.scrollTop
      + document.documentElement.scrollTop;
  } 
  var noteDiv = document.getElementById("noteDiv");
  noteDiv.style.display = "block";
  noteDiv.style.left = (x+20)+"px";
  noteDiv.style.top = (y)+"px";
} 

function hideNote() { 
  document.getElementById("noteDiv").style.display = "none";
}
#noteDiv {
  display:none;
  position: absolute;
}
<div id='noteDiv'>
  <div style="margin: 5px; float: right; font-size: smaller">
    <span onclick="hideNote()">Close</span>
  </div>
  <br clear="all">
  <div>Note Content</div>
</div>

<button id="noteButton" type="button">Note</button>

【讨论】:

  • 谢谢迈克尔!我将 ' 更改为 " 来圈出函数,但它不起作用。我必须使用 echo 因为我需要一个 var 作为类。这是我编辑的代码部分。 echo "";
  • 嗨迈克尔,当我运行你给我的代码时,noteDiv 也没有显示。真的吗?
  • 嗨迈克尔,我意识到重点不是“,而是函数之后的;!我删除了那个;,但仍然无法正常工作....
  • 您的 echo 语句有问题。查看生成页面的源码,检查button标签,找到你的错误。
  • 是的!请看我编辑的问题。我改变了回声。
【解决方案2】:

它应该可以工作,但请记住,您需要单击屏幕上的特定区域,而不仅仅是单击任何位置来关闭笔记。您可以通过设置带边框的 span 样式使该区域对用户显而易见。

你可以在这里看到一个演示来证明它可以工作:https://jsfiddle.net/g43j5jdp/1/

我在关闭区域添加了一个边框,如下面的代码所示。

<div style="margin: 5px; float: right; font-size: smaller;
border:1px solid red;"><span onclick="hideNote()">Close</span>

注意 解决您的问题的最快方法是使用浏览器的开发工具。否则你最终可能会在这方面花费太多时间。

另外请阅读这篇 stackoverflow 帖子,它可能会帮助您摆脱在呈现的 html 中显示的 php 代码 $classStr:Why is my PHP source code showing? 您的问题似乎与 php 配置有关。

【讨论】:

  • 谢谢你。这是一个很好的建议!但是noteDiv仍然没有显示。
  • 请检查呈现的 html 源代码以验证您的“注释”按钮缺少什么?您可以使用浏览器的开发人员工具,或者只需右键单击呈现的页面并选择“查看页面源代码”。也许你可以粘贴你在这里找到的 html。
  • 谢谢 Sunil,这是我从页面来源得到的:
  • 我已经看到了问题。 onclick 属性不会被 html 识别,因为它之前有 $classStr。您正在做一些 php 错误。这就是您的“备注”按钮不起作用的原因。
  • 你是对的!我改变了那部分。仍然无法正常工作....我将在问题中粘贴新部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-09
  • 2020-02-22
  • 2016-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多