0

特定のイベントを追跡する jQuery プラグインをプログラミングしています。質問の最後に役立つサニタイズされたコードの 2 つの JSFiddle の例を提供しました。

2 つの特定のイベントが発生しない理由を理解するのに苦労しています。最初の関数は、ユーザーがまたはフィールド内でbackspaceまたはdeleteキーをトリガーしたときを追跡します。このためのコード: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キーは、条件ステートメント内で期待どおりに機能します。およびキーはbackspacedeleteプラグイン内でフォーカスのある要素をターゲットにしているときは機能しません。


発生しない 2 番目のイベントは、ユーザーがアイドル状態になったかどうかを追跡することです。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)現在フォーカスされている要素を操作するように設定しました。ほとんどの関数では、これで問題なく動作しましたが、これら 2 つは問題があることがわかっています。


最初の JSFiddle は、プラグイン内の 2 つの関数です。tabは機能しますが、修正キーは機能しません。奇妙なことに、この例ではアイドル関数が起動しています (私の開発環境では起動しません)。これは JSFiddle で機能しているため、解決が難しい場合があることは承知しています。おそらく、これを改善するために自分の内部で外部プラグインを処理することに関する提案はありますか?

フィドル 1

2 番目の JSFiddle はbackspacedelete重要な機能をプラグインとターゲットの外に持ち出し、機能するようになりました$('input, select, textarea')

フィドル 2

4

1 に答える 1

1

Fiddle1 の場合:

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

$this実際にあるものを見てください。

于 2013-02-28T22:50:00.013 に答える