$element.show()在IE中不起作用

$element.show() not working in IE?

本文关键字:IE 不起作用 element show      更新时间:2023-09-26

我在$tip中存储了一个小div,当用户点击某个链接时,我想将其显示在用户的点击位置。这就是我正在做的,它是一个插件的一部分,其中$this是一个动态创建的已知对象:

$this.children('.menu').children('.details').bind('click', function(e){
   $tip = $('#resizetip');
   tiptext = "some text for my sweet little tip";
   $tip.css('top',e.clientY);
   $tip.css('left',e.clientX);
   $tip.html(tiptext);
   $tip.show();
});

提示显示在预期的位置,在Chrome和FF中都很好,但我不知道为什么它在IE8甚至IE9中都不起作用。我尝试了console.log($tip.html());,它给出了预期的输出,所以我知道它在某个地方。我试着输出坐标,结果很好。

然后我从控制台显式地尝试了$('#resizetip').show();,它成功了!它出现了,正好在它应该出现的地方。但为什么它在代码中不起作用呢?我试着添加另一行$tip.show();,以防由于某种莫名其妙的原因第一行无法启动,但这无济于事。

编辑

我在代码中添加了一个编辑,以显示e的来源,但我知道这不是问题所在,因为当我将e.clientX输出到控制台时,输出是好的。

这肯定是"e"不可用的问题。查看此网站以了解跨浏览器对此问题的解释:http://www.quirksmode.org/js/events_properties.html

基本上,你必须检查"e"是否存在,如果没有用窗口分配它。事件:

函数doSomething(e){如果(!e)var e=window.event;。。。。}

您很可能需要类似的东西:

if (!e){ 
  var e = window.event
}

在您的函数顶部附近。可能没有为IE定义e,因此您需要恢复到window.event。你可以在这里阅读更多

用于IE 的clientX文档

设置一些单位并使用pageX和pageY代替

$tip.css({
    'top', e.pageY+ "px", 
    'left',e.pageX + "px"
);