jQuery插件不触发更正keydown或空闲事件
Posted
技术标签:
【中文标题】jQuery插件不触发更正keydown或空闲事件【英文标题】:jQuery plugin not firing correction keydown or idle events 【发布时间】:2013-02-15 07:48:26 【问题描述】:我正在编写一个跟踪特定事件的 jQuery 插件。我提供了 2 个 JSFiddle 示例,用于在问题结束时提供帮助。
我正在努力理解为什么 2 个特定事件没有触发。第一个函数跟踪用户何时触发input
或textarea
字段中的backspace 或delete 键。代码:
// Keydown events
$this.keydown(function (e)
var keyCode = e.keyCode || e.which;
// Tab key
if (e.keyCode === 9)
alert('tab key');
else if (e.keyCode === 8 || e.keyCode === 46) // Backspace and Delete keys
if ($this.val() !== '')
alert('Backspace or delete key');
);
我只希望在字段不为空时跟踪纠错键。上面示例中的 tab 键在条件语句中按预期工作。 backspace 和 delete 键在插件内部并以焦点元素为目标时不起作用。
第二个未触发的事件是跟踪用户是否空闲。它利用jQuery idle timer plugin 来操作焦点元素。
// Idle event
$this.focus(function()
$this.idleTimer(3000).bind('idle.idleTimer', function()
alert('Gone idle');
);
).focusout(function()
$this.idleTimer('destroy');
);
通过这两个事件,我重构了代码。他们在插件之外并针对$('input, select, textarea')
并按预期工作。我已将它们带入插件中,并将它们设置为$(this)
以操作当前焦点所在的元素。对于大多数功能,这可以正常工作,但事实证明这两个是有问题的。
第一个 JSFiddle 是插件内部的 2 个函数。 tab 有效,而更正键无效。奇怪的是,在这个例子中,idle 函数正在触发(它不在我的开发环境中)。由于这在 JSFiddle 中工作,我接受这可能难以解决。也许关于在我自己的内部处理外部插件来解决这个问题的建议?
Fiddle 1
第二个 JSFiddle 已经在插件之外使用了 backspace 和 delete 键功能,并以 $('input, select, textarea')
为目标,现在可以使用了。
Fiddle 2
【问题讨论】:
【参考方案1】:对于 Fiddle1:
if ($this.val() !== '')
alert('Backspace or delete key');
看看$this
到底是什么。
【讨论】:
我希望$this
成为当前焦点元素。看来我有这个偏差?那么我如何将当前焦点元素传递给这个函数呢?
哦,别介意我之前(已删除)的评论。只是这个$('input, select, textarea').contextHelp('browser');
而不是$(document).contextHelp('browser');
怎么样。这意味着将插件应用于所有可编辑元素而不是文档以上是关于jQuery插件不触发更正keydown或空闲事件的主要内容,如果未能解决你的问题,请参考以下文章
在 JS/jQuery 中触发 keypress/keydown/keyup 事件?
jquery 键盘事件 keypress() keydown() keyup()