2013-04-08 110 views
0

我正在使用jQuery 1.7.1爲什麼我的jQuery觸發keyup事件會丟失?

我的keyup處理程序工作正常,即使設置有點複雜。這發生在iframe覆蓋中。主要頁面確實

our.Catalog.makeViewer = function(id) { 
    var iframe = document.createElement('iframe'); 
    iframe.setAttribute()... // src, id, name, etc. Exact same host and method 
    document.body.appendChild(iframe); 
    iframe.contentWindow.focus(); 
    $('html, body').css('overflow', 'hidden'); 
} 
our.Catalog.makeViewer('foo') // actually bound to a click hander 

在iframe <head>,我們有一些像

our.Viewer = function(){ 
    $(document).keyup(function(e){ doSomething() }) 
    // and lots more, of course 
} 
$(function() { 
    new our.Viewer(); 
}); 

瀏覽器顯示的iframe的網址。我爲整個瀏覽器窗口獲得了所有真正的鍵盤,這很好,但爲了測試,我希望能夠模擬JavaScript中的鍵盤輸入。但是,無論我嘗試什麼都行不通。我試過

$('body').trigger($.Event('keyup', {keycode: 40})) 
$(document).trigger($.Event('keyup', {keycode: 40})) 
$(document).keyup() 

並沒有一個觸發我的處理程序。然後我想也許問題是我使用iframes,所以我試過

$('#frameId').contents().find('body').trigger($.Event('keyup', {keycode: 40})) 

不,也不管用。我不認爲這是任何類型的權限/安全問題,因爲$('#frameId').contents().find('body').addClass('test')工作正常。

我希望我在做一些愚蠢的事情,很容易讓人糾正。我怎樣才能模擬我的JavaScript驅動程序中的鍵盤輸入?

+0

我對你的整個HTML設置有點困惑。你在哪裏綁定'keyup'處理程序?在父頁面還是在iframe中?事件不會從iframe中冒出來,所以你不能在iframe中觸發事件**,並期望在父頁面中捕獲它們。 – Ian 2013-04-08 06:44:25

+0

@Ian他建議他使用''而不是'