【发布时间】:2014-02-15 12:44:11
【问题描述】:
更新:找到可能的原因,当我确认后我会发布它作为答案
我发现了一些关于 IE 行为的有趣之处。
与我在 jsfiddle 上发布的示例相反,我的原始页面在背景中显示了一张图片(抱歉省略了它,我认为它不相关)。不是作为 CSS 背景属性,而是作为带有 mouseenter/mouseleave 事件处理程序的 div 之前的 img 元素。我不使用 z-index 属性(并且我已经确认使用它不会改变任何内容)我发现在这种情况下(img 元素后跟应在其上呈现的绝对定位的 div)IE 只会触发 mouseleave/mouseenter div可见部分的事件。就我而言,我通过向所有 div 添加 (border-style:solid) 和相当大的 (border-width) 来发现这一点。 IE 在鼠标指针进入 div 的边框时触发 mouseenter,然后在鼠标指针不再超过边框像素时触发 mouseleave,即使它在 div 内(可能是因为 div 是透明的)。如果没有边框(如我的原始代码),则没有 mouseenter 事件。
在 jsfiddle 中,这没有被复制。但是如果我添加 img 元素应该是 100% 可重现的。
可能的解决方法(我现在将对其进行测试并更新):div 背景像素不得透明,否则将在指针不再超过边框像素后立即触发 mouseleave,如果没有边框,则不会触发 mouseenter/mouseleave被解雇了。对所有像素为 1% 不透明的 div 使用 png 背景图像应该可以解决问题。也许 css opacity 属性(没有任何背景图像但具有纯色背景)也可以工作。
更多信息:
- 我的文档类型是
- 我需要背景图片是img元素,不实用 在这种情况下使用 CSS 背景属性。
原问题:
IE 10 控制台未提供任何有用信息。我开始在脚本的不同部分使用 console.log 并得出结论,对于 IE 10,mouseenter 和 mouseleave 不会被触发,在其他 IE 版本中不确定。在 Chrome 和 Firefox 中运行良好,并且可能在 Opera 中运行。
此代码导致控制台中没有输出(对于 IE)。它至少应该打印“IE TEST 2”。
console.log("IE TEST 1"); // OK
$(".show_on_mouseenter").mouseenter(function (evt) {
console.log("IE TEST 2"); // nothing is print
showContent(this);
});
$(".hide_on_mouseleave").mouseleave(function (evt) {hideContent(this)});
console.log("IE TEST 3"); // OK
现在我将尝试使用鼠标悬停来模拟 mouseenter/mouseleave。但如果代码能像现在这样在 IE 上运行,那就太好了。
我试图在 jsfiddle 中仅复制代码的相关部分。这次它也适用于 IE 10。在这些代码行之前我什么都没做,也许是我的风格导致了问题。我修改了我的 css 以使内容 div 和控制 div 从一开始就可见,它们的位置和大小与 IE 10 中的预期一致。我原来的 hideContent 和 showContent 函数比我在 jsfiddle 显示的代码更多,但它们不是问题,因为在我的 IE 10 中它们没有被调用,因为之前的 console.log() 行没有被执行。
jsfiddle 上的代码显示脚本的行为方式。将鼠标移到 div 上,出现另一个 div,然后将鼠标移出第一个 div,内容再次隐藏。你会看到很多可疑的值,比如“left: 14.321px”。那是因为我的原始代码计算左侧、顶部、宽度和高度并产生未截断的值,因为我测试过的每个浏览器都接受这些值,我只是让它们作为双精度值。还有一些是百分比,但在 jsfiddle 中我在所有情况下都使用 px 因为我是手动输入的。
由于某种原因,此代码在 IE 10 中有效。jquery 版本与我使用的相同。我无法在 jsfiddle 中复制问题。
更多信息:除了我自己的 console.log() 行之外,控制台很清晰。我正在从连接到我的路由器的另一台机器上运行的 http 服务器下载我的页面。我记得一些关于 IE 安全警察导致从 Intranet 加载页面脚本的问题。可能是这个问题吗?
【问题讨论】:
-
在 IE 中支持 mouseenter 和 mouseleave 事件。那么您能否提供更多相关代码(HTML)和复制您的问题的 jsfiddle?!
-
完成。我无法在 jsfiddle 中复制该问题。这可能是由 IE 安全警察造成的吗?
-
控制台有错误吗?您应该删除所有 CSS,删除所有不相关的代码,并尝试定位使您的代码无法在您的网站上运行的原因。显然,问题不在于您在此处发布的任何内容,因此没有人可以为您提供更多帮助。简而言之,你必须在你身边调试它
-
在创建事件时
.show_on_mouseenter已经在 DOM 中了吗?否则你可能不得不使用$("body").on("mousenter",".show_on_mouseenter", function() { }); -
已经在 DOM 中。在我的第一个版本中,我通过 AJAX 加载了所有控制 div 和内容 div,但我意识到这可能会导致与搜索引擎的关系不好,然后我修改了一些东西以确保从服务器下载时所有 div 及其文本都已经存在(一个 php脚本处理这个)并且内容在那里,因为我可以在页面 html 中看到它。事件处理程序也分配在 window.onload = function () {[the code]} 上,并且 jquery 首先由前一个
标签: javascript jquery internet-explorer