以编程方式触发Android上按钮的点击事件

时间:2017-06-08 09:49:54

标签: javascript cordova ionic-framework android-tv ionic3

我目前正在使用Cordova 7.0.1在Ionic 3.3.0中使用Android TV控件。由于设备没有触摸屏,我必须使用遥控器。我正在使用

@HostListener('document:keydown', ['$event'])
handleKeyboardEvent(event: KeyboardEvent) {
  // Check the key code and determine the next element to focus
  // ...

  // Focus the element
  this.renderer.invokeElementMethod(nextElement._elementRef.nativeElement,'focus');
}

检查遥控器推动以改变焦点。这很好用。当按下回车键时,我想要激活按钮的点击动作。现在我尝试使用像

这样的东西
@HostListener('document:keydown', ['$event'])
handleKeyboardEvent(event: KeyboardEvent) {
  if(event.key == 'Enter') {
    var focusedButton = Helper.getCurrentlyFocusedButton();
    focusedButton._elementRef.nativeElement.click();
    // Using the debugger I know that these lines are triggered, but nothing happens
  }
}

以编程方式按下按钮。当使用离子服务与Chrome但在Android设备(Sony KD-49XD7005与Android TV 6.0.1)上不起作用时,此功能正常。至于我可以通过谷歌搜索收集,这是因为不支持点击。但必须有另一种方法来触发此事件?我还尝试手动创建触摸事件

var e1 = document.createEvent('TouchEvent'); // Also tried 'UIEvent'
e1.initEvent('touchstart', true, true);

var e2 = document.createEvent('TouchEvent');
e2.initEvent('touchend', true, true);

this.renderer.invokeElementMethod(focusedButton._elementRef.nativeElement, 'dispatchEvent', [e1]);
this.renderer.invokeElementMethod(focusedButton._elementRef.nativeElement, 'dispatchEvent', [e2]);

// Also tried
// focusedButton._elementRef.nativeElement.dispatchEvent(e1);
// focusedButton._elementRef.nativeElement.dispatchEvent(e2);

但最终没有任何效果。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

我通过查看离子角度的源代码来弄清楚自己。在文件node_modules/ionic-angular/tap-click/tap-click.js中是一个处理click事件的方法。它调用另一个名为shouldCancelClick(ev)的方法,当true未定义或为假时,它返回this.dispatchClickthis.dispatchClickpointerStart(ev)设置,该mousedown绑定到mousedown事件。

所以必须做的就是在触发click事件之前触发var e1 = document.createEvent('MouseEvents'); e1.initEvent('mousedown', true, true); focusedButton.dispatchEvent(e1); var e2 = document.createEvent('MouseEvents'); e2.initEvent('click', true, true); focusedButton.dispatchEvent(e2); 事件。

我解决了这个问题:

https://github.com/moby/moby/issues/31860