Javascript Angular应用程序:用于反应表单字段之间的虚拟键盘的制表键功能

Javascript Angular应用程序:用于反应表单字段之间的虚拟键盘的制表键功能,javascript,html,angular,virtual-keyboard,Javascript,Html,Angular,Virtual Keyboard,我正在寻找更好的方法或建议,以实现标签键在我的应用程序中的虚拟键盘。 我在angular form field click get current input click事件中实现了类似的功能,并在Tab键上迭代当前表单中的所有输入字段,获得下一个输入字段 基本上使用dispatchEvent和event.target 关于tabKeyPress调用方法: TabKeyEventInTabletMode(event, currentdata) { var excludeFields: a

我正在寻找更好的方法或建议,以实现标签键在我的应用程序中的虚拟键盘。 我在angular form field click get current input click事件中实现了类似的功能,并在Tab键上迭代当前表单中的所有输入字段,获得下一个输入字段

基本上使用
dispatchEvent
event.target

关于tabKeyPress调用方法:

TabKeyEventInTabletMode(event, currentdata) {
    var excludeFields: any = ["checkbox", "button", "toggle"];
    if (this.EventData && this.EventData.target && this.EventData.target.id) {
      if (this.EventData.target.form && this.EventData.target.form.elements && this.EventData.target.form.elements.length != 0) {
        for (var i = 0; i < this.EventData.target.form.elements.length; i++) {
          if (this.EventData.target.form.elements[i].id && this.EventData.target.form.elements[i].id == this.EventData.target.id) {
            var NextTabIndex = undefined;
            if (i + 1 < this.EventData.target.form.elements.length) {
              if (this.EventData.target.form.elements[i + 1].id && this.EventData.target.form.elements[i + 1].name && this.EventData.target.form.elements[i + 1].type && !excludeFields.includes(this.EventData.target.form.elements[i + 1].type)
                && this.EventData.target.form.elements[i + 1].readOnly == false) {
                NextTabIndex = i + 1;
              } else {
                for (let index = i + 1; index < this.EventData.target.form.elements.length; index++) {
                  if (this.EventData.target.form.elements[index].id && this.EventData.target.form.elements[index].name && this.EventData.target.form.elements[index].type && !excludeFields.includes(this.EventData.target.form.elements[index].type)
                    && !this.EventData.target.form.elements[index].readOnly) {
                    NextTabIndex = index;
                    break;
                  }
                }
              }
              if (NextTabIndex != undefined) {
                if (this.properties && Object.keys(this.properties).length != 0) {
                  var Exists: any;
                  var labelName = this.EventData.target.form.elements[NextTabIndex].name;
                  var parsedCols = JSON.parse(JSON.stringify(this.properties));
                  var arrayProp: any = Object.keys(parsedCols);
                  arrayProp.forEach(element => {
                    if (parsedCols[element] && parsedCols[element].label && parsedCols[element].label.toUpperCase() == labelName.toUpperCase()) {
                      Exists = parsedCols[element];
                    }
                  });
                  if (this.EventData && this.EventData.target && this.EventData.target.select) {
                    this.EventData.target.select();
                  }
                  var element = document.getElementById(this.EventData.target.form.elements[NextTabIndex].id);
                  // var event1 = new Event('change');
                  setTimeout(() => {
                    element.dispatchEvent(event);
                  }, 100);
                
                  return;
                }
              }
            }
          }
        }
      }

    }
  }
选项卡KeyEventIntabletMode(事件,currentdata){
var excludeFields:any=[“复选框”、“按钮”、“切换”];
if(this.EventData&&this.EventData.target&&this.EventData.target.id){
if(this.EventData.target.form&&this.EventData.target.form.elements&&this.EventData.target.form.elements.length!=0){
for(var i=0;i{
if(parsedCols[element]&&parsedCols[element]。label&&parsedCols[element]。label.toUpperCase()==labelName.toUpperCase(){
Exists=parsedCols[element];
}
});
if(this.EventData&&this.EventData.target&&this.EventData.target.select){
this.EventData.target.select();
}
var element=document.getElementById(this.EventData.target.form.elements[NextTabIndex].id);
//var event1=新事件(“变更”);
设置超时(()=>{
元素。dispatchEvent(事件);
}, 100);
返回;
}
}
}
}
}
}
}
}
以上一段时间工作不正常,循环迭代形式较大

请给我一些建议和参考,以实现标签键的角度形式使用虚拟键盘

任何帮助都是非常感激的

谢谢