0

当他们点击某个链接时,我想在用户的点击位置显示一些div存储空间。$tip这就是我正在做的事情,它$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到控制台时,输出很好。

4

3 回答 3

1

这绝对是“e”不可用的问题。查看此站点以了解跨浏览器此问题的说明:http ://www.quirksmode.org/js/events_properties.html

基本上你必须检查“e”是否存在,如果不使用window.event分配它:

函数 doSomething(e) { if (!e) var e = window.event; ....}

于 2013-02-15T15:38:43.627 回答
0

您很可能需要类似以下内容:

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

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

IE 的 clientX 文档

于 2013-02-15T15:35:01.937 回答
-2

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

$tip.css({
    'top', e.pageY+ "px", 
    'left',e.pageX + "px"
);
于 2013-02-15T15:35:33.143 回答