2016-11-22 1 views
0

aktivieren Wie Sie diese jquery in Angular RichtlinieWie erste Eingabefokus in Winkel js Richtlinie

JQuery

$(":input:not(input[type=button],input[type=submit],button):enabled:visible:first").focus(); 

ich die unten versucht haben, gelten aber kein Glück

Angular Richtlinie Verbindung

.directive('autoFocus', ['$timeout', function ($timeout) { 
    return { 
    scope: { 
     autoFocusInitial: "=" 
    }, 
    link: function (scope, element, attrs) { 

     if (scope.autoFocusInitial == true) { 

     $timeout(function() { 
      element[0].querySelector("input:not(.ng-hide)").filter(":enabled:visible:first").focus(); 
     }); 
     } 
    } 

    }; 
} 
+0

Wäre praktisch sein, Ihre HTML- –

+0

sehen nicht das Autofokus-Attribut stattdessen verwenden können? – GillesC

+0

@GillesC I bedingten Eingabeelemente basierend auf Zustand haben, wird das erste Element aktiviert werden. Schließlich, welcher Eingang aktiviert ist, sollte fokussiert sein. – klmuralimohan

Antwort

0

Ihr Hauptproblem ist die sichtbar und aktiviert ist,

var dom = $element[0].querySelector('input:not(.ng-hide):not(:disabled)');

keine deaktivierten Elemente auswählen wird, querySelector standardmäßig wird immer nur die erste greifen, kann man nicht (with vanilla javascript by default) auf der :visible Pseudo wählen basiert.

DEMO mit Visibility CHECK: http://jsfiddle.net/Lvc0u55v/12386/

EDIT: Als Ihr Kommentar vorgeschlagen, sind Sie nach dem Textbereich und auch wählt, meine aktualisiert DEMO sehen, aber nur eine einfache Kette genügt:

$element[0].querySelectorAll('input:not(:disabled), textarea:not(:disabled)');

Hinweis: Ich habe das ng-hide entfernt, da es jetzt prüft, ob es sichtbar ist oder nicht, und da es so aussieht, als ob ng-hide unsichtbar wäre, ist es sinnlos, das der Anfrage hinzuzufügen.

EDIT 2:

Da, Sie wollen den Fokus auf dynamische Generatoren wie eine ng-repeat zu binden, würde ich sagen, bedingt den Autofokus, wenn ausgeführt, dh wenn die ng- Wiederholung beendet ist, in den meisten Fällen sollten Sie in der Lage sein, es ohne die ng-init oder condtion auf dem Attribut auszuführen.

DEMO: http://jsfiddle.net/Lvc0u55v/12393/ oder http://jsfiddle.net/Lvc0u55v/12394/

+0

Danke Hochkins. Dies funktioniert jedoch nur für Eingabeelemente, nicht für Textbereich oder Auswahlelemente. Angenommen, wir haben alle Elemente in einer Form (Eingabe, Textbereich und wählen Sie im Dropdown) je nachdem, was in erster aktiviert ist, die konzentriert bekommen sollte. aber in der obigen Demo funktioniert der Link nicht wie erwartet. – klmuralimohan

+0

Sehen Sie meine Bearbeitung @ klmuralimohan –

+0

das funktioniert hervorragend für statische Formulare, aber nicht ng-repeat (dynamisch erstellt) Eingabeelemente – klmuralimohan