3


0

私はjqueryを使って名前空間付きのイベントを作成しています。 code = 112、bool = falseの関数で次の関数を使用すると、FFではすべてがうまく機能し、F1キーが自分の関数に送信され、新しいタブでFirefoxヘルプを開くためのイベントが発生しません。

function bindKeyFunc(code、func、bool){$(document).bind( 'keypress。' code、function(e){var c =(e.keyCode?} e.keyCode:e.which); //console.log(c); if(code == c){//e.stopPropagation(); //e.preventDefault(); func();戻りブール。 ;}}); }

chromeとie 8では、stopPropagationをアンコメントしてpreventDefaultを呼び出しても、イベントリスナーは起動せず、代わりに通常のヘルプが表示されます。

同様に、私が自分の目的で ``キーを引き継ごうとしたとき、それはFFでは素晴らしく動作しますが、私のイベントはchromeやie8では発生せず、代わりにタブのデフォルトアクションが発生します。

$( 'input#manual-total')。bind( 'keypress.dep'、関数(e){var code =(e.keyCode?) e.keyCode:e.which); if(code == 9){$( 'div#formset')。show(); $(next).focus()[0] .select(); falseを返します。 ;}});

4 Answer


2


keydown`上のプレーンな document.addEventListener`がChrome上で私のために働きました。

var util = {};

document.addEventListener( 'keydown'、関数(e){

var key = util.key [e.which]; if(key){e.preventDefault(); }

if(key === 'F1'){//何かをする}})

util.key = {9: "tab"、13: "enter"、16: "shift"、18: "alt"、27: "esc"、33: "rePag"、34: "avPag"、35: " 、36: "自宅"、37: "左"、38: "上"、39: "右"、40: "下"、112: "F1"、113: "F2"、114: "F3" 、115:「F4」、116:「F5」、117:「F6」、118:「F7」、119:「F8」、120:「F9」、121:「F10」、122:「F11」、123 : "F12"}


1


あなたはクロスブラウザのキーF1 - F12を使用することはできません。 このデモを試してください。 http://jshotkeys.googlepages.com/test-static-01.html


1


がんばろう。 ブラウザで特別なキーをマッピングするのは面倒です。 特に、http://www.quirksmode.org/js/keys.html [IEは確かにファンクションキーのためのkeypressイベントを全く起動しない] ただし、onkeydown / upはIEでも動作します。 多くのキーは、ブラウザごとに異なる方法で誤って処理されます。 私はF1を扱うためのクロスブラウザ方式があることを強く疑います。 ごめんなさい;私はそれがあなたが望んだ答えではないことを知っています、しかし私はそれが真実だと信じます。

リンクされた記事、特に「句読点をさらに実験することで自分の正気を危険にさらさないことを決めたとき」についての時折の警告を読んでください。など。 :)


0


keyDeomeを使用した場合にchromeを使用するとヘルプページが表示されるため、preventDefaultではkeyupの代わりにkeydownを使用します。

if(e.key === "F1"){e.preventDefault(); //ここでコードを実行します。