jQuery插件没有触发校正keydown或空闲事件

时间:2013-02-28 22:41:32

标签: javascript jquery jquery-plugins jquery-events

我正在编写一个跟踪特定事件的jQuery插件。我已经为清理过的代码提供了2个JSFiddle示例,以便在问题结束时提供帮助。

我正在努力理解为什么2个特定事件没有解雇。第一个函数跟踪用户何时触发inputtextarea字段中的退格删除键。代码:

// 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中工作,我接受这可能很难解决。也许建议在我自己内部处理外部插件来解决这个问题?

Fiddle 1

第二个JSFiddle在插件之外采用了 backspace delete 键功能,目标是$('input, select, textarea'),现在可以正常工作。

Fiddle 2

1 个答案:

答案 0 :(得分:1)

对于小提琴1:

if ($this.val() !== '') {
        alert('Backspace or delete key');
}

看看$this实际上是什么。