2017-10-20 2 views
1

Ich habe eine Suchseite auf einer Web/Mobile App, die ein Feld hat. Wenn wir auf die Seite kommen, muss der Fokus auf dieses Feld gesetzt werden, damit der Benutzer einfach mit der Eingabe beginnen kann. Ich habe eine Direktive erstellt und sie mit meinem Eingabefeld verknüpft, aber das funktioniert nur, wenn ich die Seite mit einem neuen Cache besuche. Wenn Sie die Seite mit einem mobilen Gerät besuchen, wird die Tastatur das erste Mal angezeigt, und danach sehen Sie, dass es hochgeht und sofort danach heruntergeht. Es scheint, als ob das Eingabefeld den Fokus nur für eine halbe Sekunde hat. Ich habe mehrere Antworten auf dieses Problem versucht, aber nichts hat es gelöst.Angular 1.x Fokus auf Eingabefeld funktioniert nur einmal

Richtlinie:

app.directive('focusField',function($timeout) { 
return { 
    link : function($scope,$element,$attr) { 
    $scope.$watch($attr.focusField,function(val) { 
     $timeout(function() { 
      val ? $element[0].focus() : 
       $element[0].blur(); 
     }); 
    }); 
    } 
}}); 

HTML:.

<input id="search-field" class="form-control" ng-model="searchText" placeholder="Search interviews..." focus-field='true' /> 

Ich habe auch mit $ in der Steuerung gesetzt Fokus versucht ('# search-Feld') konzentrieren(); aber es hat genau das gleiche Problem.

Irgendwelche Ideen, wie ich den Fokus auf das Feld bei jedem Besuch des Benutzers zwingen kann?

Vielen Dank im Voraus!

Antwort

0

Wenn der Eingang fokussiert werden muss, warum benötigen Sie focus-field='false'. Wenn ich Sie wäre, würde ich einfach die $attr und die $watcher entfernen. gehen

link : function($scope,$element) { 
    $timeout(function() { 
     $element[0].focus(); 
    }, 0); 
}; 

Dann für

<input focus-field type="search" /> 
+0

ich wirklich Ihre rasche Antwort zu schätzen wissen, aber leider das gleiche Problem auftritt: das Feld erhält den Fokus nur auf das erste Mal – evanbrosky