4

したがって、ユーザーがリストから何かを選択し、クリックする代わりにEnterキーを押すと、選択したデータでページを更新することを想定したドロップダウンリストがあります。

IEとFirefoxで完璧に動作していますが、SafariとChromeは完全に無視しているようです。

ドロップダウンリストに属性を追加する場所は次のとおりです。

cboContext.Attributes.Add("OnKeyDown", "if (typeAhead(event,'" + cboContext.ClientID + "') == 1) contextPostback();");

ChromeとSafariのOnKeyDown属性を無視しているようです

編集:

SimeとNilからの作業とコメントに基づいて、ChromeがkeyCodeを認識しておらず、未定義として表示されていることがわかりました。

typeAhead()コードをjsFiddleに配置しました

ここで、keyCodeの変数を宣言します。

var charCode = evt.keyCode || evt.which;

なぜそれが未定義のままになるのか誰かが知っていますか?

4

3 に答える 3

2

「onchange」属性を使用できます(追加で、または「onkeydown」属性の代わりとして)。

Chromeでは、SELECT要素を開いてEnterキーを押すと、「onchange」コードが実行されます。

ライブデモ: http: //jsfiddle.net/nQhUT/3/

于 2012-07-05T20:22:36.227 に答える
0

イベント名では大文字と小文字が区別されます。イベントは「オンキーダウン」である必要があります。IEはこれを強制しない可能性がありますか?

cboContext.Attributes.Add("onkeydown", "if (typeAhead(event,'" + cboContext.ClientID + "') == 1) contextPostback();"); 
于 2012-07-05T19:58:43.503 に答える
0

編集:

typeAhead関数でinputBuffer.accumStringが何をするのかわかりません。フィドルで試してみると、コードが壊れていました。

onchangeを使用してtypeAhead関数を呼び出そうとしている場合、以下のコードのcharCodeは未定義になります。keyCodeは、ブラウザ間でKeyup/keyDownでのみ取得できます。こちらをご確認ください。

var charCode = evt.keyCode || evt.which;

関数を注意深くチェックすると、キーが押された場合は1が返され、inputBufferに対して何らかの操作が実行されます。それ以外の場合は、-1が返されます。onkeydown / onkeyupの代わりにŠimeVidasによって提案されたように、関数をonchangeで機能させることができれば、ブラウザー間で機能ます

于 2012-07-11T17:20:19.383 に答える