2015-08-28 437 views
1

我的代碼被我正在創建的Chrome擴展注入的嚴重問題。本質上,我需要一個keyup事件監聽器來拾取某個鍵,但我似乎無法得到它。在jQuery中觸發一個keyup事件

這裏是我注入的代碼(請注意,有很多的冗餘,因爲我想要大量的東西來讓它觸發事件監聽器,一旦找到可用的代碼,我就會清理它)。

function simulateKey(iElement) { 
    $(iElement).focus(); 

    var e = jQuery.Event("keyup"); 
    e.which = 37; 
    e.keyCode = 37; 
    e.charCode = 0; 

    $(iElement).keyup(function() { 
     console.log("keyup element"); 
    }); 

    $(iElement).trigger(e); 

    var f = jQuery.Event("keyup"); 
    f.which = 70; 
    e.keyCode = 70; 
    f.ctrlKey = true; 
    f.shiftKey = true; 

    $(iElement).trigger(f); 
    $ (document).trigger(f); 
    $ (window).trigger(f);  
} 

當調用此函數時,輸入元素變爲焦點並且「控制鍵元素」被打印到控制檯。但是,當這個函數被調用並且我有一個事件監聽器斷點設置爲keyup事件時,代碼不會出現。

當我簡單地按住鍵盤上的某個鍵,同時關注輸入字段,並且爲鍵盤事件設置了事件監聽器斷點時,源jquery.min.js中斷,「(e)」爲突出顯示,這是該函數調用的參數:「f = v.handle = function(e)」...請注意,只有一個斷點正常發生,但是如果我已經調用了我的函數,則會發生2個斷點,因爲我在關鍵事件中生成console.log。

任何幫助非常感謝,謝謝!

回答

0

使用$.Event()創建請求的事件,並使用.trigger()

DEMO:JSnippet

CODE:

$(function() { 
    var $iElement = $('#logit'); 
    $iElement.keyup(function(e) { 
     console.log(e.which); 
     $(this).val(e.which); 
    }); 
    simulateKey($iElement); 
}); 


function simulateKey($iElement) { 
    var e = $.Event('keyup'); 
    e.which = 65; // Character 'A' 
    $iElement.trigger(e); 
} 
+0

的問題是,即使你給我的代碼似乎被其他KEYUP聽衆有所回升。如果轉到JSnippet頁面,打開開發工具並設置關鍵事件的事件斷點,則即使將e.which打印到控制檯並設置爲iElement中的值,也不會在運行代碼時中斷。但是,如果您關注html輸入並開始輸入,則觸發斷點。 –