2016-04-05 7 views
1

[CTRL]キーが押されたかどうかに応じてselect要素のchangeイベントを処理したいが、作業。HTML選択要素のonChange()ハンドラのCTRLキー状態を検出する方法

ここで私が持っているものだ:ASP.NET WebフォームListBoxコントロール(それはそう(少し簡略化などのオプションを使用して、select要素にレンダリング):

<select name="ctl00$ContentPlaceHolder1$MultiselectDropDownStatus" id="ctl00_ContentPlaceHolder1_MultiselectDropDownStatus" size="7" multiple="multiple"> 
    <option selected="selected" value="">All</option> 
    <option value="1">Option 1</option> 
    <option value="2">Option 2</option> 
</select> 

今、ユーザーが1つのオプションを選択したときに、私はCTRLキーの状態に応じて何かをしたい、私はそうのような変更イベントを処理します:スクリプトメソッド内

script.AppendLine(@"  $(""#" + ClientID + @""").change(function (e) {"); 
//.... 

を私はキーの状態を確認したい

script.AppendLine(@"   if (e.ctrlKey) {"); 
script.AppendLine(@"    alert(""ctr key was pressed during the click"")"); 
script.AppendLine(@"   }"); 
//... 

ただし、このように、e.crtlKeyは、常にundefinedです。

しかし、私は直接(ない変更イベントを経由して)ListBoxコントロールのクリックイベントを処理する際、そのよう:ここ

script.AppendLine(@"  $(""#" + ClientID + @""").click(function (e) {"); 
script.AppendLine(@"   if (e.ctrlKey) {"); 
script.AppendLine(@"    alert(""ctr key was pressed during the click"")"); 
script.AppendLine(@"   }"); 

e.crtlKeyは私に正しい値を与えます。

なぜ変更ハンドラでCTRL-Key状態を正しく取得できないのですか?

私は今IE 11で作業していますが、他の主要なブラウザでも動作するはずです。

更新:元々、CTRLキーの状態を使用して複数の選択肢があるというイベントを処理したかったのです。私はこれが間違っていたことに気づいたので、選択したオプションを明示的に数えることでこれを解決しました。しかし、この質問は有効なので、私はここに残します:変更されたハンドラのキー状態を検出する方法?

答えて

1

できません。あなたが注意したように、changeイベントはctrlKeyを定義しません。

changeは、base event interfaceを使用し、ctrlKeyを処理しないイベントです。 ctrlKeyを定義するには、TouchEvent,MouseEvent、またはKeyboardEventを使用する必要があります。

この例では、clickは、changeを引き起こします。 clickは、MouseEventであるため、ctrlKeyの情報を持ちますが、changeはありません。

必要に応じて、ctrlKeyが押されたかどうかを示すグローバル変数をclickイベントで更新し、changeイベント内でその変数を使用することができます。

関連する問題