【问题标题】:Angular2 : inputs focusAngular2:输入焦点
【发布时间】:2017-08-06 11:14:54
【问题描述】:

我是 Angular 2 的新手,我的代码有问题。 当达到最大长度时,我正在尝试将 input1 的焦点更改为我的 input2。 现在,我计算按键的数量并与最大长度进行比较。 我不明白如何使用 .focus 属性... 我已经尝试了这些指令,但我又失败了,我没有其他想法来解决这个问题......这让我发疯了! 有人可以帮我吗?

@Component({
  moduleId: module.id,
  selector: 'sd-about',
  template: ` 
   <span (ngSubmit)="onMovieSubmit()" *ngFor="let MovieField of MovieTab">
    <input 
      type="text" 
      maxlength="6"
      size="3"
      #movieName 
      (keyup)= presskeyNumber(movieName.value.length,MovieField.length,MovieField.id)><br/>
   </span>
   `
})

export class AboutComponent {
  @Output() RestrictionNumber:number;

  public presskeyNumber(movieName: any, restriction: number, MovieField: number) {
    this.RestrictionNumber = restriction;
    if (movieName === this.RestrictionNumber) {     // If my movie field length = my maxlength
      console.log('fieldFocus : ', MovieField + 1); // The next input Id
      // Change focus here
    }
  }

  public MovieTab = [
    { id: 1, movieName: "Movie1", length: 6 },
    { id: 2, movieName: "Movie2", length: 6 },
    { id: 3, movieName: "Movie3", length: 6 }
  ];
}

【问题讨论】:

    标签: angular


    【解决方案1】:
    @ViewChild('movieName') movieName
    
    
    public presskeyNumber(movieName: any, restriction: number, MovieField: number) {
        this.RestrictionNumber = restriction;
        if (movieName === this.RestrictionNumber) {     // If my movie field length = my maxlength
          console.log('fieldFocus : ', MovieField + 1); // The next input Id
          // Change focus here
           this.movieName.nativeElement.focus()
        }
      }
    

    如果你想在循环中使用它,也许将局部变量作为参数传递给你的方法会更容易:

    <span (ngSubmit)="onMovieSubmit()" *ngFor="let MovieField of MovieTab">
        <input 
          type="text" 
          maxlength="6"
          size="3"
          #movieName 
          (keyup)= presskeyNumber(movieName, movieName.value.length,MovieField.length,MovieField.id)><br/>
       </span>
    

    然后:

    public presskeyNumber(movieNameElement, movieName: any, restriction: number, MovieField: number) {
        this.RestrictionNumber = restriction;
        if (movieName === this.RestrictionNumber) {     // If my movie field length = my maxlength
          console.log('fieldFocus : ', MovieField + 1); // The next input Id
          // Change focus here
           movieNameElement.focus()
        }
      }
    

    这样,您不需要使用ViewChild,因为您将输入元素传递给您的函数。

    【讨论】:

    • 虽然此代码块可能会回答 OP 的问题,但如果您解释此代码与问题中的代码有何不同、您已更改的内容、您为什么更改了它以及为什么在不引入其他人的情况下解决了问题。
    • 大家好,感谢您的回答和 cmets !如果我理解语法,ViewChild 装饰器在其参数中采用局部变量(#movieName),而movieName 是用于执行nativeElement.focus 的新变量,对吧?但是这种方法是否适用于更多 2 个输入(因为局部变量和我的 *ngFor 循环)?是否有可能做到这一点 ?关注 input1 -> 关注 input2 -> 关注 input3
    猜你喜欢
    • 1970-01-01
    • 2022-01-19
    • 2017-06-11
    • 2010-11-01
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多