2016-07-11 3 views
2

Привет У меня есть последующий код:Trigger нажмите на ближайший DIV с angularJS

angular.module("myApp", []).controller("myController", function($scope) { 
 
    $scope.clickedInput = function() { 
 
    setTimeout(function() { 
 
     angular.element('.addon').triggerHandler('click'); 
 
    }, 100); 
 
    } 
 

 
    $scope.clickedAddon = function(number) { 
 
    console.log(number); 
 
    } 
 
});
.wrapper { 
 
    display: flex; 
 
    flex-direction: column; 
 
} 
 
.inputWithAddon { 
 
    display: flex; 
 
    margin-bottom: 10px; 
 
} 
 
input { 
 
    height: 20px; 
 
} 
 
.addon { 
 
    width: 26px; 
 
    height: 26px; 
 
    background-color: green; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<div class="wrapper" ng-app="myApp" ng-controller="myController"> 
 
    <div class="inputWithAddon"> 
 
    <input placeholder="1" class="myInput" ng-click="clickedInput()"> 
 
    <div class="addon" ng-click="clickedAddon(1)">1</div> 
 
    </div> 
 
    <div class="inputWithAddon"> 
 
    <input placeholder="2" class="myInput" ng-click="clickedInput()"> 
 
    <div class="addon" ng-click="clickedAddon(2)">2</div> 
 
    </div> 
 
    <div class="inputWithAddon"> 
 
    <input placeholder="3" class="myInput" ng-click="clickedInput()"> 
 
    <div class="addon" ng-click="clickedAddon(3)">3</div> 
 
    </div> 
 
</div>

Моя идея, когда я нажимаю на входе, он заставляет щелчок с triggerHandler() к зеленый div на правой стороне и печатает его номер. Он должен просто заставить щелчок зеленого div, который находится на правой стороне щелкнутого входа, а не все из них. Сегодня я написал аналогичный вопрос для JQuery: Force click with trigger() on closest div

Там он отлично работает с более возможными решениями. Как я могу сделать тот же эффект с angularjs?

Спасибо.

+0

в угловую вы просто должны непосредственно изменить функцию в нг-клик, намного чище. «think-angular» «not-think-jquery» – Iceman

+0

Проблема заключается в том, что моя кнопка addon вызывает всплывающую подсказку с атрибутом costum и некоторыми json-данными внутри ... Это плагин и обрабатывает всплывающую подсказку в фоновом режиме. Поэтому мне нужно нажать на него. Это просто пример, показывающий эффект. Я не могу просто вызвать функцию в своем реальном коде для аддона ... – MrBuggy

+0

Готово !!! чк мой ответ. 1/2 часа работы с голографической работой ясно показывает, почему всем нам нужен jquery. : D – Iceman

ответ

2

Перевал $event на главную ng-click function, а затем получить .parent(), а затем 2-го ребенка. Затем триггер.

var a = angular 
      .element($event.target) 
      .parent().children() 
     angular 
      .element(a[1]).triggerHandler('click'); 

angular.module("myApp", []).controller("myController", function($scope) { 
 
    $scope.clickedInput = function($event) { 
 
    setTimeout(function() { 
 
     var a = angular 
 
      .element($event.target) 
 
      .parent().children() 
 
     angular 
 
      .element(a[1]).triggerHandler('click'); 
 
     
 
    }, 100); 
 
    } 
 

 
    $scope.clickedAddon = function(number) { 
 
    console.log(number); 
 
    } 
 
});
.wrapper { 
 
    display: flex; 
 
    flex-direction: column; 
 
} 
 
.inputWithAddon { 
 
    display: flex; 
 
    margin-bottom: 10px; 
 
} 
 
input { 
 
    height: 20px; 
 
} 
 
.addon { 
 
    width: 26px; 
 
    height: 26px; 
 
    background-color: green; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<div class="wrapper" ng-app="myApp" ng-controller="myController"> 
 
    <div class="inputWithAddon"> 
 
    <input placeholder="1" class="myInput" ng-click="clickedInput($event)"> 
 
    <div class="addon" ng-click="clickedAddon(1)">1</div> 
 
    </div> 
 
    <div class="inputWithAddon"> 
 
    <input placeholder="2" class="myInput" ng-click="clickedInput($event)"> 
 
    <div class="addon" ng-click="clickedAddon(2)">2</div> 
 
    </div> 
 
    <div class="inputWithAddon"> 
 
    <input placeholder="3" class="myInput" ng-click="clickedInput($event)"> 
 
    <div class="addon" ng-click="clickedAddon(3)">3</div> 
 
    </div> 
 
</div>

+1

Отлично, спасибо, сэр! :) привет! – MrBuggy