Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   body on click или как закрыть попап при клике вне его (https://javascript.ru/forum/angular/51984-body-click-ili-kak-zakryt-popap-pri-klike-vne-ego.html)

bes 30.11.2014 16:23

Цитата:

Сообщение от krutoy
bes,
спасибо

пожалуйста

nerv_ 30.11.2014 19:24

bes, krutoy, а теперь все тоже самое, но для фреймворка ангуляр :)

На раздел хоть иногда смотрите)

bes 30.11.2014 21:49

Цитата:

Сообщение от nerv_
bes, krutoy, а теперь все тоже самое, но для фреймворка ангуляр

На раздел хоть иногда смотрите)

:D не вижу тестового кода

Sufir 01.12.2014 10:01

Да, какой тут, собственно, тестовый код? Есть блок, который отображается, если ввести какой-то текст в поле поиска:
<div class="header-search" ng-controller="SearchFieldController">
    <input ng-model="query" type="text" placeholder="ПОИСК" maxlength="32" ng-keypress="search($event)" ng-trim="true">

    <div ng-if="isSuggestVisible()" class="header-search-suggest">
      <!-- ... тут repeat с результатами поиска -->
    </div>

</div>

$scope.isVisible = function(entity) {
    return (foundedResults.length > 0);
}


Если как-то всю страницу обернуть в контроллер и isVisible хранить в $rootScope? Как-то не нравится мне такая идея... Ну, что, неужели я первый кто столкнулся с подобной задачей?
Как вариант вот так: ng-blur="clearSearch()" Но если фокус теряется до окончания запроса, то саггест висеть остаётся и при клике по самому саггесту (по ссылкам) он пропадать не должен...

Sufir 01.12.2014 11:00

$document.on('click', function (e) {
            var clickedOutside = true;

            for (var element = e.target; element; element = element.parentNode) {
                if (element.className === "header-search-suggest" || element.className === "header-search-suggest-inner") {
                    clickedOutside = false;
                    break;
                }
            }

            if (clickedOutside) {
                $scope.clearSearch();
                $scope.$apply();
            }

});


Часовой пояс GMT +3, время: 19:16.