4

Ctrl+Nを別の動作に再マップしたいWebページがあります。YUIのキーリスナーの登録の例に従い、関数が呼び出されましたが、Firefoxは新しいブラウザウィンドウを作成します。IE7では問題なく動作しているようです。新しいウィンドウが表示されないようにするにはどうすればよいですか?

例:

var kl2 = new YAHOO.util.KeyListener(document, { ctrl:true, keys:78 },
             {fn:function(event) {
                     YAHOO.util.Event.stopEvent(event); // Doesn't help
                     alert('Click');}});
kl2.enable();

デフォルトの動作を削除することが可能です。Googleドキュメントは、Firefoxの保存ダイアログを表示する代わりに、Ctrl+Sを上書きしてドキュメントを保存します。Ctrl + Sで上記の例を試しましたが、Firefoxの保存ダイアログが表示されます。Googleは保存ダイアログが表示されないようにすることができるので、ほとんどのデフォルトのキーボードショートカットを防ぐ方法があると確信しています。

4

4 に答える 4

7

トリックは「fn」機能がすごいことです。

実験的に、fn の関数型は 2 つのパラメーターを取ることがわかります。最初のパラメーターには、実際にはイベントの TYPE が含まれています。2番目のものには...が含まれています...これは厄介です:インデックス0のコードポイントとインデックス1の実際のイベントオブジェクトを含む配列.

コードを少し変更すると、次のようになります。

function callback(type, args)
{
    var event = args[1]; // the actual event object
    alert('Click');

    // like stopEvent, but the event still propogates to other YUI handlers
    YAHOO.util.Event.preventDefault(event);
}
var kl2 = new YAHOO.util.KeyListener(document, { ctrl:true, keys:78 }, {fn:callback});
kl2.enable();

また、Lisp を愛するために、コード内で生のコード ポイントを使用しないでください。"78" の代わりに 'N'.charCodeAt(0) を使用します。または関数としてラップする

function ord(char)
{
    return char.charCodeAt(0);
}
于 2009-04-24T15:09:25.913 に答える
0

YUIのイベントutilを使用すると、 stopEventメソッドを試して使用できます。

ただし、ほとんどのユーザーはブラウザで特定の操作を行うキーを押すことに慣れているため(この例では新しいウィンドウ)、常に衝突を避けています。つまり、メタキーやコントロールキーを使用していません。

私は単に文字を単独で使用しますが、これはテキスト入力ボックスができるまでは問題ないので、このちょっとしたアドバイスはあまり役に立たないかもしれません。

于 2008-11-13T23:49:42.823 に答える
0

デフォルトのブラウザー ショートカットを上書きすることは簡単ではありませんが、アプリケーションの外観がよりプロフェッショナルになるため、場合によってはこれを行う価値があります。このスクリプトを見てください。

http://www.openjs.com/scripts/events/keyboard_shortcuts/index.php#disable_in_input

それは私にとってうまくいくことがわかりました..

于 2009-02-23T10:24:24.570 に答える
0

私はここで推測していますが、それができるとは思いません。

可能であれば、絶対にすべきではありません。一般的なキーボード ショートカットは、いじってはいけません。次は何ですか?ウィンドウを閉じるボタンをフックして、新しいウィンドウを開く...

于 2008-10-03T11:15:38.520 に答える