0

jQueryUI Autocomplete が現在フォーカスされている項目を選択してメニューを閉じるのを防ぐために ENTER を押したときの相互作用を特に防ぎたいです。

次のドキュメントを参照しています: http://api.jqueryui.com/autocomplete/#event-changeここに画像の説明を入力

4

1 に答える 1

1

アップデート:

原理は同じです。代わりにフォームを送信するように関数を変更するだけsetTimeoutです (ここで示されているように: http://jsfiddle.net/X8Ghc/8/ )

アップデート:

あなたは正しいです、$(this)を参照することになっていましたui-menu(そして明らかにそうではありませんでした)。新しいフィドルhttp://jsfiddle.net/X8Ghc/7/は、かなりうまく機能します。

$(document).ready(function() {
    $("#autocomplete").autocomplete({
        "open": function(e, ui) {
            //using the 'open' event to capture the originally typed text
            var self = $(this),
                val = self.val();
            //saving original search term in 'data'.
            self.data('searchTerm', val);
        },
        "select": function(e, ui) {
            var self = $(this),
                keyPressed = e.keyCode,
                keyWasEnter = e.keyCode === 13,
                useSelection = true,
                val = self.data('searchTerm');
            if (keyPressed) {
                if (keyWasEnter) {
                    useSelection = false;
                    e.preventDefault();
                    window.setTimeout(function() {
                        //since there is apparently no way to prevent this
                        //contemptible menu from closing, re-open the menu
                        //using the original search term after this handler
                        //finishes executing (using 'setTimeout' with a delay
                        //of 0 milliseconds).
                        self.val(val);
                        self.autocomplete('search', val);
                    }, 0);
                }
            }
            return useSelection;
        },
        "source": ["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby"]
    });
});​

オリジナル:

これはフィドルで機能します:

$(document).ready(function() {
    $("#autocomplete").autocomplete({
        "select": function(e, ui) {
            var keyPressed = e.keyCode,
                keyWasEnter = e.keyCode === 13,
                useSelection = true;
            console.log(e);
            if (keyPressed) {
                if (keyWasEnter) {
                    useSelection = false;
                    $(this).open(e, ui);
                }
            }
            return useSelection;
        },
        "source": ["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby"]
    });
});​
于 2012-10-27T03:11:25.580 に答える