如何在 HTML select 元素的 onChange() 处理程序中检测 CTRL 键状态
How to detect the CTRL-Key state in the onChange() handler for an HTML select element
我想根据是否按下 CTRL 键来处理 select 元素的更改事件,但它不起作用.
这是我所拥有的:一个 ASP.NET WebForms 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>
现在,当用户 select 有一个选项时,我想根据 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
。
但是,当我直接处理列表框控件的点击事件时(不是通过更改事件),像这样:
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 键状态?
我现在正在使用 IE 11,但它应该也适用于其他主流浏览器。
更新:最初我想使用 CTRL 键状态处理具有多个 selection 的事件。我意识到这是错误的,现在我通过显式计算 selected 选项解决了这个问题。然而,这个问题仍然有效,因此我将把它留在这里:How to detect the key state in the changed handler?
你不能。如您所述,更改事件未定义 ctrlKey
。
change is an event which uses the base event interface,不处理 ctrlKey
。
要定义 ctrlKey
,您需要使用 TouchEvent, MouseEvent, or KeyboardEvent。
在您的示例中,click
导致 change
被触发。 click
作为 MouseEvent,具有 ctrlKey
信息,但 change
没有。
如果需要,您可以在单击事件中更新一个全局变量,该变量将指示是否按下了 ctrlKey,然后在更改事件中使用它。
我想根据是否按下 CTRL 键来处理 select 元素的更改事件,但它不起作用.
这是我所拥有的:一个 ASP.NET WebForms 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>
现在,当用户 select 有一个选项时,我想根据 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
。
但是,当我直接处理列表框控件的点击事件时(不是通过更改事件),像这样:
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 键状态?
我现在正在使用 IE 11,但它应该也适用于其他主流浏览器。
更新:最初我想使用 CTRL 键状态处理具有多个 selection 的事件。我意识到这是错误的,现在我通过显式计算 selected 选项解决了这个问题。然而,这个问题仍然有效,因此我将把它留在这里:How to detect the key state in the changed handler?
你不能。如您所述,更改事件未定义 ctrlKey
。
change is an event which uses the base event interface,不处理 ctrlKey
。
要定义 ctrlKey
,您需要使用 TouchEvent, MouseEvent, or KeyboardEvent。
在您的示例中,click
导致 change
被触发。 click
作为 MouseEvent,具有 ctrlKey
信息,但 change
没有。
如果需要,您可以在单击事件中更新一个全局变量,该变量将指示是否按下了 ctrlKey,然后在更改事件中使用它。