2012-11-26 52 views
7

我目前正在開發一個依賴於地圖(OpenStreetMap數據通過Leaflet.js)和地圖上顯示的標記的應用程序。jQuery:如何停止Ctrl + A的傳播?

我實現供用戶選擇,這樣他就可以點擊標記進行選擇,然後按住Ctrl鍵單擊要添加標記來選擇。這很好。現在

我希望用戶能夠通過按Ctrl鍵一個目前選擇地圖上的所有標記物。我用它來實現這一目標看起來像這樣的代碼:

jQuery(document).keydown(function(e) { 
    if (e.ctrlKey) { 
    if (e.keyCode == 65 || e.keyCode == 97) { // 'A' or 'a' 
     e.stopPropagation(); 
     // SELECT ALL MARKERS HERE... 
    } 
    } 
}); 

以此爲據可以作爲觸發同時按Ctrl和A按鍵來講,我想選擇完成。

我的問題: 即使我增加了行停止事件的傳播,瀏覽器(在Chrome和Opera測試)仍然不平常Ctrl + A全選,也就是附加到我的標誌越來越通過我在地圖上的自定義選擇實現進行選擇,整個網頁被選中。這很煩人:在地圖旁邊沒有可以選擇的文字,所以確實沒有意義 - 我想禁用CtrlA而我的地圖顯示。

P.S. 我試圖使用How can I disable Ctrl+A (select all) using jquery in a browser?中顯示的代碼,但無法使其正常工作。這個功能是否真的在API中?

回答

10

假設你的錯誤是你正在使用e.stopPropagation(),它只是停止事件的進一步冒泡(因爲你的事件附加到文檔 - 它是沒用的)。嘗試e.preventDefault()代替:

jQuery(document).keydown(function(e) { 
    if (e.ctrlKey) { 
    if (e.keyCode == 65 || e.keyCode == 97) { // 'A' or 'a' 
     e.preventDefault(); 
     // SELECT ALL MARKERS HERE... 
    } 
    } 
}); 

這對我的作品罰款this demo

+0

啊,我們發現它是一樣的第二... :)在這裏,你去好先生,有一個接受。 – fgysin

+0

不適合我在鉻 –

0

啊,我找到了竅門:

e.preventDefault(); 

執行任何默認動作停止瀏覽器。在上述情況下,這可防止通常在Ctrl + A上觸發的全選事件。