7

この質問の目的は、jquery - autocompleteを使用して、tabアイテムが選択されていない場合にキーが最初のアイテムを選択できるようにすることです。

私が実装したコード(1)は機能しますが、疑問があります。目標を達成するために、それらを明確にするか、可能であればコード(1)を改善/変更したいと思います。

私の疑問は次のとおりです。

ENTERのトリガーが早すぎます。イベントのディスパッチは非同期です(異なるリスナーは同期的に呼び出されますが、トリガーとは非同期です)。そのため、リスナーがDONEを処理する前にトリガーする可能性があります。
したがって、ここでは両方のイベントに同じオブジェクトを使用しているため、厄介な副作用が発生する可能性があります(たとえば、最初のディスパッチ中にデフォルトを防止すると、2番目のディスパッチも同じオブジェクトであるため防止されます) 。

何か提案/コメントはありますか?

PS:

  1. jsfiddleリンクは次のとおりです:http://jsfiddle.net/uymYJ/31/
  2. この質問は、この質問に関連しています。この状況でイベントオブジェクトを変更しないようにする方法

(1)

$("#box").keydown(function(event){
    var newEvent = $.Event('keydown', {
        keyCode: event.keyCode
    });

    if (newEvent.keyCode !== $.ui.keyCode.TAB) {
        return;
    }

    newEvent.keyCode = $.ui.keyCode.DOWN;
    $(this).trigger(newEvent);

    newEvent.keyCode = $.ui.keyCode.ENTER;
    $(this).trigger(newEvent);
});
4

1 に答える 1

3

次のようなものが必要だと思います:

$("#box").keydown(function(event){
    var newEvent = $.Event('keydown', {
        keyCode: event.keyCode
    });

    if (newEvent.keyCode !== $.ui.keyCode.TAB) {
        return;
    }

    if (newEvent.keyCode == $.ui.keyCode.TAB) {
        // custom logic for tab
        newEvent.keyCode = $.ui.keyCode.DOWN;
        $(this).trigger(newEvent);
        return false;
    }

    // ...
});
于 2012-08-23T11:14:50.840 に答える