Событие для всех полей ввода, радиобаттонов и чекбоксов

Рейтинг: 0Ответов: 1Опубликовано: 08.12.2014

В $scope есть функция putdata(), которая отправляет на сервер данные. Данные нужно отправлять при событии blur с каждого поля (будь то радиобаттон, текстария и т.д.). Есть ли в angularJs возможность не писать каждому полю ng-blur="putdata()", а, например, в контроллере прописать какую-то хитрость? Просто полей реально очень много, и мне кажется писать это в каждом поле будет неправильно по правилу DRY (Don't repeat yourself).

Ответы

▲ 1Принят

Вы можете передать в контроллер параметр $element (Это будет тот тег, на который повешен контроллер), а дальше каким либо образом найти в нем все нужные вам элементы и навесить на них событие. Если на проекте используется jQuery то все очень просто, внутри контроллера:

$element.find('input, textarea, select').on('blur', function() {
    $scope.putdata();
});

Если же jQuery у вас нет, то все чуть сложнее. Как минимум придется написать 3 такие функции отдельно для каждого вида елементов:

$element.find('input').on('blur', function() {
    $scope.putdata();
});
$element.find('textarea').on('blur', function() {
    $scope.putdata();
});
$element.find('select').on('blur', function() {
    $scope.putdata();
});

так как сам ангуляр не умеет в селекторы и может искать только по именам тегов.