2016-11-16 2 views
0

После нажатия кнопки + фокус смещается в другое поле ввода в формате HTML. Я хочу сосредоточиться на текущем поле ввода, если пользователь не нажмет на другое поле ввода. Вот когда я хочу перенести фокус на выбранное поле ввода.Настройка фокуса по ID Угловая

<div layout="row" layout-align="center center"> 
    <md-input-container class="md-block" flex="50"> 
     <input required id="circleTimeWordListEditText" type="text" placeholder="Words List" ng-model="circleTime.word"/> 

     <div ng-messages="$error"> 
      <div ng-message="required">This is required.</div> 
     </div> 
    </md-input-container> 
</div> 

<div layout="row" layout-align="center center"> 
    <md-button class="md-raised md-primary" type="submit" 
       ng-click="circleTime.onAddButtonClicked()">+ 
    </md-button> 
</div> 

В настоящее время я делаю это:

document.getElementById('circleTimeWordListEditText').focus(); 

, и я попытался это, как хорошо, но это дает мне ошибку NOSEL.

angular.element('circleTimeWordListEditText').focus(); 

Я попытался это решение тоже:

mainApp.factory('focus', function($timeout, $window) { 
    return function(id) { 
     // timeout makes sure that it is invoked after any other event has been triggered. 
     // e.g. click events that need to run before the focus or 
     // inputs elements that are in a disabled state but are enabled when those events 
     // are triggered. 
     $timeout(function() { 
      var element = $window.document.getElementById(id); 
      if(element) 
       element.focus(); 
     }); 
    }; 
}); 

mainApp.directive('eventFocus', function(focus) { 
    return function(scope, elem, attr) { 
     elem.on(attr.eventFocus, function() { 
      focus(attr.eventFocusId); 
     }); 

     // Removes bound events in the element itself 
     // when the scope is destroyed 
     scope.$on('$destroy', function() { 
      elem.off(attr.eventFocus); 
     }); 
    }; 
}); 


onAddButtonClicked : function(elem) { 
      //do stuff 

      focus('circleTimeWordListEditText'); 
      /*var temp = document.getElementById('circleTimeWordListEditText'); 
      alert(temp); 
      temp.focus(); 
      angular.element('circleTimeWordListEditText'); 
      angular.element('circleTimeWordListEditText').focus();*/ 
     } 
    }, 

но он не работает.

Какое рекомендуется решить эту проблему?

ответ

1

Я думаю, вы можете использовать следующий фрагмент.

var myEl = document.getElementById('circleTimeWordListEditText'); 
var angularEl = angular.element(myEl); 

angularEl.focus(); 
+0

Это не работает –

+0

я просто проверял, и он работает здесь. Вы уверены, что ваша функция вызывается нажатием кнопки? Как ваша функция выглядит в вашем контроллере? –

+0

Да. Я печатаю журнал, когда выполняется фрагмент кода –

2

У меня была такая же проблема. Это сработало для меня. Надеюсь, это сработает и для вас!

function someFunction() 
{ 
var element = angular.element("#id here"); 
element.focus() 
} 

Для вас, следующее может работать:

function onAddButtonClicked() 
{ 
    var element = angular.element("#circleTimeWordListEditText"); 
    element.focus() 
} 
+0

Пожалуйста, сообщите нам, почему проблема исчезла. Благодаря! – Peter

+0

Для меня это сработало. Я хотел сосредоточить определенный элемент. Таким образом, я добавил идентификатор к нему, и, получив этот конкретный элемент с id, используя angular.element и установив фокус на этот элемент, проблема решена для меня. –

+0

Исправьте меня, если я ошибаюсь :) –

Смежные вопросы