jQuery插件不触发更正keydown或空闲事件

Posted

技术标签:

【中文标题】jQuery插件不触发更正keydown或空闲事件【英文标题】:jQuery plugin not firing correction keydown or idle events 【发布时间】:2013-02-15 07:48:26 【问题描述】:

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

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

// 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 键在条件语句中按预期工作。 backspacedelete 键在插件内部并以焦点元素为目标时不起作用。


第二个未触发的事件是跟踪用户是否空闲。它利用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 已经在插件之外使用了 backspacedelete 键功能,并以 $('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()

jquery常用函数

JQuery——键盘事件.keydown().keyup()和.keypress()

表单事件(jQuery)

Jquery点击事件出发顺序