2

JQuery オートコンプリートを使用しています。問題は、役に立たないものをテキストボックスに入力して送信ボタンをクリックしたときです。フォームが送信された後に変更メソッドが呼び出されるため、処理前に検証をチェックしません。

var fromAutocomplete = this.$("#fromCity").autocomplete({
                        source : urlRepository.airportAutoSuggest,
                        minLength : 3,
                        select: function(event, ui) {
                            searchFormView.$("#fromCity").val(ui.item.label);
                            searchFormView.$("#fromCityCode").val(ui.item.value);
                            searchFormView.$('#fromCityCountry').val(ui.item.country);
                            isValid = true;
                            return false;
                        },
                        selectFirst: true,
                        change: function (event, ui) {
                            if (!ui.item) {
                                $(this).val('');
                            }
                        }
                    }).live('keydown', function (e) {
                        var keyCode = e.keyCode || e.which;
                        //if TAB or RETURN is pressed and the text in the textbox does not match a suggestion, set the value of the textbox to the text of the first suggestion
                        if((keyCode === 9 || keyCode === 13) && ($(".ui-autocomplete li:textEquals('" + $(this).val() + "')").size() === 0)) {
                            $(this).val($(".ui-autocomplete li:visible:first").text());
                        }
                    });

タブを押すとうまくいきます。
オートコンプリート結果の値が選択されていない場合、フォームの送信を制限する方法を教えてもらえますか?

4

1 に答える 1

0

フォームを送信するのはブラウザのデフォルトの動作であるため、キーはそこで機能しません。Enter キーを押す代わりにフォーム送信をフェッチする必要があります。

var fromAutocomplete = this.$("#fromCity").autocomplete({
    source : urlRepository.airportAutoSuggest,
    minLength : 3,
    select: function(event, ui) {
        searchFormView.$("#fromCity").val(ui.item.label);
        searchFormView.$("#fromCityCode").val(ui.item.value);
        searchFormView.$('#fromCityCountry').val(ui.item.country);
        isValid = true;
        return false;
    },
    selectFirst: true,
    change: function (event, ui) {
        if (!ui.item) {
            $(this).val('');
        }
    }
}).live('keydown', function (e) {
    var keyCode = e.keyCode || e.which;
    //if TAB is pressed and the text in the textbox does not match a suggestion, set the value of the textbox to the text of the first suggestion
    if( keyCode === 13) && ($(".ui-autocomplete li:textEquals('" + $(this).val() + "')").size() === 0)) {
        $(this).val($(".ui-autocomplete li:visible:first").text());
    }
}).closest('form').submit(function() {
    //if RETURN is pressed and the text in the textbox does not match a suggestion, set the value of the textbox to the text of the first suggestion
    $(this).val($(".ui-autocomplete li:visible:first").text());

    return false;
});
于 2012-12-29T13:26:25.400 に答える