2016-11-22 40 views
0

如何角指令適用這個jQuery如何啓用第一輸入焦點在角JS指令

jQuery的

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

我曾嘗試以下,但沒有運氣

角指令鏈接

.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

將方便看到你的HTML –

+0

不能使用自動對焦屬性呢? – GillesC

+0

@GillesC我具有基於條件的條件輸入元件,第一元件將被啓用。最後,無論哪個輸入都應該被關注。 – klmuralimohan

回答

0

您的主要問題是可見和啓用,

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

不會選擇任何禁用的元素,querySelector默認情況下將只搶到第一位的,你不能(with vanilla javascript by default)選用基於:visible僞。

能見度CHECK DEMO:http://jsfiddle.net/Lvc0u55v/12386/

編輯:作爲您的意見建議,你的textarea後,選擇太多,看到我更新DEMO,但只是一個簡單鏈就足夠了:

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

注:我刪除了NG-隱藏,因爲它現在檢查它是否可見或不可見,並且看到作爲NG隱藏將是不可見這是毫無意義的,這增加了要求。

編輯2:

看到,因爲你想將焦點動態綁定的發電機如NG重複,我會告訴有條件自動對焦時運行NG-,即當重複已經完成,在大多數情況下,你應該能夠不NG-init或在屬性condtion運行它。

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

+0

謝謝Hochkins。但是,這隻適用於輸入元素而不是文本區域或選擇元素。假設我們有一個形式的所有元素(輸入,文本區域,選擇下拉)無論在:第一,應該得到重點已啓用。但在上面的演示鏈接沒有按預期工作。 – klmuralimohan

+0

見我的編輯@klmuralimohan –

+0

這個偉大工程靜態形式,但不NG-重複(動態創建的)輸入元素 – klmuralimohan