【发布时间】: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 中工作,我接受这可能难以解决。也许关于在我自己的内部处理外部插件来解决这个问题的建议?
第二个 JSFiddle 已经在插件之外使用了 backspace 和 delete 键功能,并以 $('input, select, textarea') 为目标,现在可以使用了。
【问题讨论】:
标签: javascript jquery jquery-plugins jquery-events