2009-11-02 58 views
0
不工作

此代碼如下工作正常window.parent jQuery選擇在IE8

$('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選擇器在這種情況下也不起作用。

+0

我決定只使用工作版本,如果你有一個工作代碼,爲什麼問題爲什麼不工作的版本有問題? – Mohammad 2009-12-21 13:57:12

回答

1

問題可能是jQuery的事件處理程序包裝必須使用window.event來檢索IE中的當前事件。如果在窗口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這樣的更寬的元素,如果它填充瀏覽器。)

+0

嗨bobice,在這種情況下只有一個窗口,我在處理程序中嘗試了「window.event」而不是「event」,但它在Dreamweaver和IE8中都只產生語法錯誤。 – Mohammad 2009-11-02 11:19:06

+0

如果只有一個窗口,爲什麼要訪問'window.parent'? – bobince 2009-11-02 11:54:54

+0

無論如何,增量屬性通常會作爲'event.wheelDelta'訪問。但是,如果你有語法錯誤,你甚至沒有那麼遠! – bobince 2009-11-02 11:56:53