0

私のアプリでは、カスタム ポップアップを作成する必要があり、それらを閉じようとすると問題が発生します。ポップアップを開くには、ユーザーはメニュー項目を選択する際に「ENTER」を押す必要があります。そこからメニューがポップアップし、閉じるボタンにフォーカスが与えられ、「閉じる」または「送信」項目を選択して「ENTER」を押すと閉じられます。

ユーザーがポップアップを閉じようとすると、ポップアップは閉じますが、閉じる関数によってキーイベントが消費されないため、再び開くことになります。

現在、ドキュメント内にナビゲーションを可能にする onkeyup イベントのキー イベント関数があり、ポップアップ クローズ関数を onclick、onkeyup、および onkeypress に割り当てようとしましたが、どれを試しても、'ENTER' を押すと常に到達してしまいますポップアップが閉じた後のメイン キー イベント関数。

私の現在のクイック フィックスは、2 つの追加のブール値を使用することです。1 つはポップアップが閉じると true になり、もう 1 つはメイン キー イベント関数が最初のブール値が true になるのを確認した後に true になります (ウィンドウの後に 1 つのブール値だけが true になるため)。何らかの理由でイベントがメイン関数に到達することを許可していた)。

ポップアップを離れるときに同じメニュー項目を選択する必要があるため、メニュー項目の選択を解除し、その場所を保存してから、メニュー項目に戻るには、さらにグローバル変数が必要になります。

2つの余分なグローバル変数を浮かび上がらせたくないので、これを行うためのより良い方法があるかどうか、私はほとんど疑問に思っています...

4

2 に答える 2

0

event.preventDefault を使用してみてください ( info here )。「デフォルトの防止」というタイトルのセクションまでスクロールします。

于 2010-06-29T02:09:26.053 に答える
0

更新:さまざまな状況でスペースバーを押すだけで、ほぼ同じ質問に答えました。どうぞ:チェックしてください。


また、フラグはそれほど悪くありません。グローバル名前空間が気になる場合 (これは良い方法です)、できることが 2 つあります。

1.関数はオブジェクトです。すべての呼び出しで使用できるプロパティ (必要に応じて静的変数) を持つことができます。

function handler() {
  if ( handler.opened ) {
    // close window
    // ...
    handler.opened = false;
  } else {
    // open window
    // ...
    handler.opened = true;
  }
}

// initialize property
handler.opened = false;
于 2010-06-29T02:28:03.053 に答える