将其他信息传递到事件处理程序

时间:2013-04-07 00:07:11

标签: javascript event-handling jquery

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

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

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

1 个答案:

答案 0 :(得分:0)

change事件和用于输入值

的键

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

  

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

例如:

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

    的解决方案

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

    keypress / keydown / keyup保存密钥并阅读change

    的演示

    可在此处获取:

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

    演示清除焦点上记录的键,将它们保存在每个keypress事件上(您可以轻松编辑并测试不同的案例)并在change事件时读取它们(以及在屏幕上输出)被触发(所以当更改的字段离开焦点时)。