【问题标题】:window.parent jQuery selector not working in IE8window.parent jQuery 选择器在 IE8 中不起作用
【发布时间】:2012-03-28 23:53:31
【问题描述】:

下面的代码可以正常工作

$('html').bind('mousewheel', function(event, delta) {
    window.parent.scrollBy(-120 * delta,0);
    return false;
});

但是这个没有,谁能告诉我为什么。我很想知道。

$(window.parent).bind('mousewheel', function(event, delta) {
    window.parent.scrollBy(-120 * delta,0);
    return false;
});

我想澄清一下,window 选择器在这种情况下也不起作用。

【问题讨论】:

  • 我决定只使用工作版本,如果您有工作代码,为什么要质疑为什么不工作版本有问题?!

标签: javascript jquery internet-explorer-8 css-selectors


【解决方案1】:

问题可能是 jQuery 的事件处理程序包装器必须使用window.event 来检索 IE 中的当前事件。如果您从窗口 A 对窗口 B 中的事件设置处理程序,则窗口 A 中的脚本将查看窗口 A 的 window.event,而事件实际上发生在窗口 B 上。

但也可能存在更多问题。跨窗口/框架脚本充满了困难,jQuery 并不是专门为解决这些问题而设计的。要让 jQuery 跨框架正常工作,通常需要在两个窗口中都有一个 jQuery 实例,并且您应该只使用相应的 jQuery 实例 ($) 与每个窗口进行交互。

eta 重新评论:

好的,进一步研究了mousewheel,我不知道您的代码如何在 Firefox 中运行(当然不适合我)。 Firefox 根本不支持 mousewheel 事件;相反,它支持DOMMouseScroll 事件。同样对于支持mousewheel的其他浏览器,它应该绑定到一个DOM节点而不是窗口。所以我猜你正在寻找的是:

if ('MouseScrollEvent' in window) {
    $(document).bind('DOMMouseScroll', function(event) {
        return scroll(event.detail*-40);
    });
} else {
    $(document).bind('mousewheel', function(event) {
        return scroll(event.wheelDelta);
    });
}

function scroll(d) {
    window.scrollBy(-d, 0);
    return false;
};

(但是在 WebKit 中,当鼠标移出与视口宽度对应的水平区域时,这将停止滚动。如果它填满浏览器,您可能更愿意将事件绑定到像 div 这样的更宽的元素。)

【讨论】:

  • 嗨,bobice,在这种情况下只有一个窗口,我在处理程序中尝试了“window.event”而不是“event”,但它只产生语法错误,无论是在 Dreamweaver 和 IE8 中。
  • 如果只有一个窗口,为什么要访问window.parent
  • 无论如何,delta 属性通常以event.wheelDelta 访问。但是,如果你有语法错误,你甚至不会走那么远!
  • bobince 你能看看我在上面的问题中包含的代码,是你推断的。在我添加 .wheelDelta 之后,该代码给了我语法错误,谢谢
  • 您没有将属性访问权限放在函数参数列表中。应该是function(event) {...window.scrollBy(event.wheelDelta*-120, 0);
猜你喜欢
  • 2013-03-08
  • 1970-01-01
  • 2012-07-04
  • 2012-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多