Angularjs автозаполнение нг-клик не работает - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь написать автозаполнение в Angularjs. Это работает для меня, кроме нажатия на предложение. Из журнала консоли выглядит так, будто всякий раз, когда я нажимаю на предложение, вызывается ng-blur элемента input, поскольку элемент ввода теряет фокус, а ng-click никогда не вызывается. Кто-нибудь может предложить решение здесь?

Вот мой код.

<!DOCTYPE html>

<head>
    <title>Autocomplete</title>
    <style>.wrapper {display: none;}.wrapper ul {list-style-type: none;}.wrapper li {padding: 5px;line-height: 25px;cursor: pointer;}</style>
    <!-- Angular JS -->
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.5/angular.min.js"></script>
</head>

<body ng-app="MyApp">

    <div ng-controller="SuggestionCtrl">
        <form action="/index.html">
            <input type="search" name="q"  autocomplete="off" 
                ng-model="q" 
                ng-focus="showSuggesions()"
                ng-blur="hideSuggesions()" 
                ng-change="getSuggestion()">
            <div class="wrapper"
                ng-if="hasSuggestions"
                ng-style="suggestionStyle">
                <ul>
                    <li ng-repeat="suggestion in suggestions"
                        ng-click="search(suggestion)">
                        {{suggestion}}
                    </li>
                </ul>
            </div>
        </form>
    </div>
var app = angular.module("MyApp", []);
app.controller("SuggestionCtrl", function ($scope) {

    $scope.suggestions = ["India", "United States", "England", "Australia"];

    $scope.showSuggesions = function () {
        $scope.suggestionStyle = { display: "block", 'background-color': '#ddd' };
    };

    $scope.hideSuggesions = function () {
        $scope.suggestionsVisible = false;
        $scope.suggestionStyle = { display: "none" };
        console.log('hideSuggestions called');
    };

    $scope.hasSuggestions = function(){
        return $scope.suggestions.length > 0;
    }

    $scope.getSuggestion = function () {
        // get suggestions from api
    };

    $scope.search = function (suggestion) {
        window.location = window.location + "?q=" + suggestion;
    };
});

1 Ответ

0 голосов
/ 10 ноября 2018

Событие click выполняется после blur - список с предложениями скрывается, прежде чем вы сможете щелкнуть по нему. Простое решение - использовать mousedown вместо click

<input type="search" name="q"  autocomplete="off" 
            ng-model="q" 
            ng-focus="show=true" 
            ng-blur="show=false">
            <div class="wrapper"
            ng-style="suggestionStyle">
            <ul ng-show="show">
                <li ng-repeat="suggestion in suggestions">
                    <a ng-mousedown="search(suggestion)">{{suggestion}}</a>
                </li>
            </ul>

Плункер: http://plnkr.co/edit/Y4e4dYD4qJZwnNRmgWiN?p=preview

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...