2016-04-05 5 views
1

ermitteln Ich möchte das Änderungsereignis eines SELECT-Elements abhängig davon, ob die [STRG] -Taste gedrückt wird, aber es nicht behandelt Arbeit.Wie der CTRL-Key-Status in der OnChange() - Handler für ein HTML-Select-Element

Hier ist, was ich habe: Ein ListBox-Steuerelement ASP.NET WebForms (das wie so mit den Optionen für ein select-Element macht (etwas vereinfacht):

<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> 

Nun, wenn der Benutzer eine Option auswählt, I wollen etwas in Abhängigkeit vom Zustand der Strg-Taste tun, ich werde das Änderungsereignis behandeln wie folgt:.

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

Innerhalb des Skriptmethode ich möchte den Tastenzustand

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

Auf diese Weise ist die e.crtlKey immer undefined.

Aber, wenn ich das Click-Ereignis der Listbox Steuerung direkt (nicht über das Änderungsereignis) behandeln, etwa so:

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

Hier gibt die e.crtlKey mir den richtigen Wert.

Warum kann ich den CTRL-Key-Status im Change-Handler nicht korrekt abrufen?

Ich arbeite gerade mit IE 11, aber es sollte auch auf anderen gängigen Browsern funktionieren.

Update: Ursprünglich wollte ich das Ereignis von mehreren Auswahlen mit dem CTRL-Tastenstatus behandeln. Ich erkannte, dass dies falsch war und jetzt habe ich das gelöst, indem ich die ausgewählten Optionen explizit gezählt habe. Diese Frage bleibt jedoch gültig und ich werde sie hier belassen: Wie kann ich den Schlüsselzustand im geänderten Handler erkennen?

Antwort

1

Sie können nicht. Das Änderungsereignis definiert ctrlKey nicht, wie Sie festgestellt haben.

change ist ein Ereignis, das die base event interface verwendet, die ctrlKey nicht behandelt. Um ctrlKey definiert zu haben, müssen Sie TouchEvent, MouseEvent oder KeyboardEvent verwenden. In Ihrem Beispiel wird click zu change ausgelöst. click, ein MouseEvent, hat die ctrlKey Informationen, aber change nicht.

Wenn gewünscht, könnte eine globale Variable im click -Ereignis aktualisiert werden, die anzeigen würde, ob ctrlKey gedrückt wurde, und dann diese im Änderungsereignis verwenden.

Verwandte Themen