2017-10-18 14 views
0

私は下矢印キーを待ち受けて、その場所にタブイベントを発生させようとしています。dispatchEventがKeyboardEvents(Angular 4)で動作しない

マイテンプレートは、この

<li #elRef 
    *ngFor="let handler of clickHandlers" 
    (click)="doClickHandlerAction(handler)" 
    (keydown)="checkArrowKey($event, elRef)"> 

が含まれていますそして、私のコンポーネントは、下矢印キーを押すと、次の

checkArrowKey(event: KeyboardEvent, el) { 
    if (event.keyCode === 40) { 
     event.preventDefault(); 

     let keyboardEvent = new KeyboardEvent('keydown', { 
     "code": "9", 
     }); 

     el.dispatchEvent(keyboardEvent); 
    } 
    if (event.keyCode === 9) { 
     console.log("tab key pressed"); 
    } 
    } 

それがイベントを送出しますが、要素がイベントを受け取るようには見えませんが含まれています。一番下のifステートメントは、タブキーが押されたかどうかをチェックしますが、イベントが送出された後は呼び出されません。私は、次の

let clickEvent = new MouseEvent('click', {bubbles: true}); 

マイdoClickHandlerAction()関数としてのMouseEventとKeyboardEventのを交換する場合

興味深いことに、問題がKeyboardEventのであることを示す、と呼ばれます。

+0

代わりに、ngFor最後の変数を使用して要素がリスト内に最後かどうかを確認し、最後に呼び出していないかどうかを確認する必要がありましたel.nextSibling.focus() –

答えて

0

それだけで、このようなinputtextareaとしてフォーカス可能要素に(keydown)イベントの仕事は非常にフォーカス動作を追加するlitabindex="0"属性を追加しているようです:あなたがイベントを送出する際

<li #elRef 
    *ngFor="let handler of [1,2,3]" 
    (keydown)="checkArrowKey($event, elRef)" tabindex="0"> hh </li> 

keyCode値が0になり、そのキーコードを読み取ることevent.codeを使用します。

checkArrowKey(event: KeyboardEvent, el) { 

    if (event.keyCode === 40) { 
     event.preventDefault(); 

     let keyboardEvent = new KeyboardEvent('keydown', { 
     "code": "9", 
     }); 

     el.dispatchEvent(keyboardEvent); 
    } 
    if (event.keyCode === 9 || event.code === '9') { 
     console.log("tab key pressed"); 
    } 
    } 

Demo

+0

これは、私の質問に答える "tab key pressed"メッセージ。私は、この方法を使用して押されているタブキーをシミュレートして、矢印キーがタブキーのように振る舞うようにすることを期待していましたが、それはうまくいきません –

関連する問題