AngularJS: How to not lose focus on element if other elements are clicked (using ng-focus/ng-blur)? -
i've got elements inside ng-repeat loop have these attributes:
<div ng-repeat="h in myobjectarray"> <div> <input ng-class="{ clicked: clickedflag1 }" ng-focus="clickedflag1 = true" ng-blur="clickedflag1 = false" type="button" id="1" value="1" ng-click="btnselected(1)" /> </div> <div> <input ng-class="{ clicked: clickedflag2 }" ng-focus="clickedflag2 = true" ng-blur="clickedflag2 = false" type="button" id="2" value="2" ng-click="btnselected(2)" /> </div> </div> what happens when 1 of elements clicked, add class clicked clicked element, , removes clicked class other button inputs.
the problem is, if click on other element on rest of page, element clicked no longer has focus , gets it's clicked class removed.
is there anyway still use ng-focus , ng-blur using above have element that's clicked have clicked class when other elements on page clicked?
to explain: before going solution, locating elements via queryselector, adding , removing classes way. pointed out using dom through angularjs way wasn't efficient, went way.
the problem select 1 button , button hold clicked class.
now problem element hold clicked class if else selected on page.
now when know you're trying do, suggestion
<div ng-repeat="h in myobjectarray"> <div> <input ng-class="{ clicked: clickedflag1 == $index }" ng-click="btnselected(1, $index)" type="button" ng-attr-id="btn1_{{ $index }}" value="1" /> </div> <div> <input ng-class="{ clicked: clickedflag2 == $index }" ng-click="btnselected(2, $index)" type="button" ng-attr-id="btn2_{{ $index }}" value="2" /> </div> </div> now, on controller, change btnselected function , allow accept second parameter:
$scope.btnselected = function(btnnumber, btnindex) { if( btnnumber == 1 ) { $scope.clickedflag1 = btnindex; } else { $scope.clickedflag2 = btnindex; } // .... rest of code } note btnnumber made name, replace current parameter name you're using in function.
when you're inside ngrepeat have $index reference current index in loop, when click on button, set clickflag1 = $index when click on first button (from within controller) on every button groups or clickflag2 = $index second button.
this allow ngclass set click class on button based on current index, instead of trusting focus/blur.
fyi - having multiple elements same id bad practice (you're inside ngrepeat), can change current id ng-attr-id="btn1_{{ $index }}" first button on each group, , ng-attr-id="btn2_{{ $index }}" second button. don't forget remove current id attributes.
Comments
Post a Comment