Событие ввода директивы при загрузке

0

Я создаю директиву для input. Мне нужно изменить имя класса, если вход не пуст:

return {
    restrict: "C",
    link: function(scope, elem, attr) {

        elem.find('input, textarea').bind('focus', function() {
            elem.find('label').addClass('active');
        });

        elem.find('input, textarea').bind('blur', function(self) {
            if (self.target.value == '') elem.find('label').removeClass('active');
        });

        elem.find('input, textarea').bind('change', function(self) {
            if (self.target.value != '') elem.find('label').addClass('active');
        });
    }
}

Вот мой ввод:

<div class="input">
        <input type="text" name="name" ng-model="name" />
        <label for="name">Name</label>
    </div>

Focus and blur работают нормально. Но change нет. value = '' нагрузки value = ''. Но мой $scope.name не пуст.

Как изменить имя класса, если ng-model не пуста при загрузке?

ОБНОВИТЬ:

        setTimeout(function() {
            if (elem.find('input, textarea').val() != '') elem.find('label').addClass('active');
        }, 100);

Оно работает. Но я думаю, может быть, в некоторых старых браузерах это должно быть 200 мс или 1000 мс...

  • 0
    пробовал добавить ng-class = "{'active': name}" в элемент метки?
  • 0
    @sdfacre, я думал об этом, но у меня есть тонны входов. Вот почему я использую директиву для класса меток. Я хотел бы иметь только один оператор для этого, кроме тонны ng-class = "{'active': name}"
Теги:

1 ответ

-1

Я думаю, вы можете использовать $timeout(function() {... }) с 0 секунд ожидания или $scope.$evalAsync().

Более подробную информацию вы найдете на http://www.bennadel.com/blog/2605-scope-evalasync-vs-timeout-in-angularjs.htm

Ещё вопросы

Сообщество Overcoder
Наверх
Меню