我正在编写一个跟踪特定事件的jQuery插件。我已经为清理过的代码提供了2个JSFiddle示例,以便在问题结束时提供帮助。
我正在努力理解为什么2个特定事件没有解雇。第一个函数跟踪用户何时触发input
或textarea
字段中的退格或删除键。代码:
// 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 键在条件语句中按预期工作。 退格和 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')
,现在可以正常工作。
答案 0 :(得分:1)
对于小提琴1:
if ($this.val() !== '') {
alert('Backspace or delete key');
}
看看$this
实际上是什么。