2013-04-07 108 views
1

我有一个事件处理程序,它在选择框中的选项被单击时执行。将附加信息传递到事件处理程序中

有没有办法通过Ctrl键(按下/未按)到事件处理程序的状态? evt不包含这些信息,因为所有与密钥相关的属性都是未定义的。

+1

change事件只会触发模糊值的变化,因此没有键的概念,所以您必须使用keyup,keydown,keypress等。 live()在更新版本的jQuery中被删除。 – adeneo 2013-04-07 00:08:28

+0

你想实现多选下拉菜单吗?如果是这种情况,那么现成的插件会为你做这件事 – 2013-04-07 00:10:20

+0

我只是想指出,'CTRL' +点击默认打开Mac上的上下文菜单。如果您的网站也针对Mac用户,那么我不会使用“CTRL”做任何操作并点击。 – 2013-04-07 00:11:37

回答

0

change事件,并用于输入值

change事件的关键是不是有相关联的密钥。请阅读jQuery的.change()文档:

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

的例子是这样的:

  1. 你有一些输入字段。
  2. 您在该字段中输入“some name”文本。
  3. 在进入其他领域之前,您决定将其更改为“some test”,例如。通过按退格几次,那么你导航到下一个字段(例如,通过使用标签键,或者通过点击接下来 iOS上的键盘等),
  4. onchange事件处理程序被触发,当你浏览到其他字段(或者说,只要字段丢失焦点),所以用于输入值的所有键的信息都是非常不相关的。

使用keypress事件

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

演示了保存键上keypress/​​/keyup和阅读change

它可以在这里找到:

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

演示清除焦点记录键,将它们保存在每个keypress事件中(您可以轻松编辑并测试不同情况),并在每次触发change事件时读取它们(并在屏幕上输出)(因此,当t他改变了场地叶子的焦点)。

+0

在这种情况下很难看出这可能会有帮助。你可以编码演示请Tadeck。 – 2013-04-07 01:22:13

+0

@ Beetroot-Beetroot:基本思想很简单:onchange不知道用于输入值的键,而onkeypress知道它。所以,你需要使用'onkeypress'来收集正确的信息,然后在'onchange'被调用时读取它。您可以使用jQuery的'.data()'来处理与特定输入相关的数据保存(按键)和读取(更改数据)。其余部分实际上是应用程序的实际部分,并且取决于您的特定需求(例如,如何处理退格空间)。 – Tadeck 2013-04-07 02:21:27

+0

@ Beetroot-Beetroot:我添加了演示链接。 – Tadeck 2013-04-07 02:46:58

相关问题