1

我有一个事件处理程序,当单击选择框中的选项时执行。

$('#my-select').live('change', function(evt) {
    ....
});

有没有办法将 Ctrl 键的状态(按下/未按下)传递给事件处理程序?evt 不包含此信息,因为所有与键相关的属性都未定义。

4

1 回答 1

0

change事件和用于输入值的键

change事件不是具有关联键的东西。请阅读 jQuery 的.change()文档:

当元素的值改变时,change 事件被发送到元素。此事件仅限于元素、框和元素。对于选择框、复选框和单选按钮,当用户使用鼠标进行选择时会立即触发该事件,但对于其他元素类型,该事件会延迟到元素失去焦点为止。

这个例子是这样的:

  1. 你有一些输入字段。
  2. 您在字段中输入“ some name”文本。
  3. 在进入其他领域之前,您决定将其更改为“ some test”,例如。通过按几次退格键,然后导航到下一个字段(例如,通过使用Tab键,或通过点击NextiOS 键盘等),
  4. onchange您导航到其他字段时(或者更确切地说,一旦字段失去焦点)就会触发事件处理程序,因此有关用于输入值的所有键的信息非常不相关。

使用keypress事件的解决方案

要解决这个问题,您需要使用keypress事件来实现您的解决方案,例如。感谢 jQuery 的.keypress()功能。在这种情况下,事件对象的ctrlKey属性(例如在此处列出)让您了解Ctrl密钥的状态。示例用法在这里:https ://stackoverflow.com/a/4604093/548696

用于保存键keypress/ keydown/keyup并继续阅读的演示change

可在此处获得:

http://jsfiddle.net/tadeck/vPu94/

该演示清除记录的焦点键,将它们保存在每个keypress事件中(您可以轻松地对其进行编辑并测试不同的情况)并在change触发事件时读取它们(并在屏幕上输出)(因此当更改的字段离开焦点时)。

于 2013-04-07T00:31:04.143 回答