0

我正在编写一个跟踪特定事件的 jQuery 插件。我提供了 2 个 JSFiddle 示例,用于在问题结束时提供帮助。

我正在努力理解为什么 2 个特定事件没有触发。第一个函数跟踪用户何时触发或字段中的backspacedelete键。代码: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键在条件语句中按预期工作。backspace和键在delete插件内部并以焦点元素为目标时不起作用。


第二个未触发的事件是跟踪用户是否空闲。它使用jQuery 空闲计时器插件来操作焦点元素。

// 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有效,而校正键无效。奇怪的是,在这个例子中,空闲函数正在触发(它不在我的开发环境中)。由于这在 JSFiddle 中工作,我接受这可能难以解决。也许关于在我自己的内部处理外部插件来解决这个问题的建议?

小提琴 1

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

小提琴 2

4

1 回答 1

1

对于小提琴1:

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

看看$this实际是什么。

于 2013-02-28T22:50:00.013 回答