2016-04-08 6 views
2

Ich habe eine Direktive, in der ich <input/> und <select> Elemente finden möchte, um ein blur Ereignis an sie zu binden. Ich weiß, ich könnte dies mit ng-blur getan werden, aber diese Frage ist wirklich über die angular.element Selektor.Angularjs Element findet sowohl Auswahl als auch Eingabe in einem Aufruf - ist das Limit ein einzelner Tag Lookup?

link: function(scope, elem, attrs){ 

    elem.find('input, select').bind('blur', someFunction); // doesn't work as input, select returns length 0 

    // this works when separated 
    elem.find('input').bind('blur', someFunction); 
    elem.find('select').bind('blur', someFunction); 

} 

Ich denke, die Frage ist, warum funktioniert der erste Weg nicht?

die documentation Zustände:

find() - Limited to-Lookups von Tag-Namen von https://docs.angularjs.org/api/ng/function/angular.element

aber nicht sagen, dass es auf einen Tag Lookups beschränkt ist. Mache ich etwas falsch? Habe ich irgendwo eine Dokumentation vermisst?

+1

ohne Komma bezeichnet eine Eltern-Kind-Beziehung, also nein, habe ich nicht versucht, dass – SoluableNonagon

Antwort

2

Offensichtlich haben wir nicht die jQuery API hier, also bin ich nicht überrascht, es ist funktioniert nicht. Die Unterlagen fehlen - auch dort keine Überraschung. Wenn Sie jedoch die source betrachten, ist .find() nichts weiter als ein Wrapper um getElementsByTagName. Also - wir kaufen uns hier nicht viel. Mit anderen Worten wird die Verbindung Wähler nicht zur Arbeit gehen ...

// jqLite.js#L998 
find: function(element, selector) { 
    if (element.getElementsByTagName) { 
     return element.getElementsByTagName(selector); 
    } else { 
     return []; 
    } 
} 
+0

, dass die Dinge aufklärt auf dem warum. Ich wünschte nur, ich hätte eine Dokumentation, die das erklärt. – SoluableNonagon