You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular实现输入框聚焦浮动标签仅首项生效的TS代码问题如何修复?

问题根因
  • 原代码中使用document.querySelector只能匹配到页面中第一个符合选择器规则的输入框,导致其余输入框没有绑定对应的聚焦/失焦逻辑
  • 原逻辑在每次输入框触发focus事件时都会重复注册监听事件,会造成冗余执行的性能问题
修复代码

1. 修改forms.component.html

将所有输入框的事件绑定修改为直接传递当前触发事件的DOM元素,同时新增失焦事件绑定:

<div class="forms-field-box">
    <div class="forms-field-inp-box">
        <input id="forms_field_inp_fn" class="forms-field-inp" type="text" (focus)="inpAnim($event.target)" (blur)="inpBlur($event.target)">
        <label for="forms_field_inp_fn" class="forms-field-inp-lbl">
            FirstName
        </label>
    </div>
</div>
<div class="forms-field-box">
    <div class="forms-field-inp-box">
        <input id="forms_field_inp_ln" class="forms-field-inp" type="text" (focus)="inpAnim($event.target)" (blur)="inpBlur($event.target)">
        <label for="forms_field_inp_ln" class="forms-field-inp-lbl">
            LastName
        </label>
    </div>
</div>
 <div class="forms-field-box">
    <div class="forms-field-inp-box">
        <input id="forms_field_inp_p" class="forms-field-inp" type="text" (focus)="inpAnim($event.target)" (blur)="inpBlur($event.target)">
        <label for="forms_field_inp_p" class="forms-field-inp-lbl">
            Password
        </label>
    </div>
</div>


<div class="forms-login-btn">
    Login
</div>

注:同时移除了重复的id="forms_input",避免id重复冲突

2. 修改forms.component.ts

删除原有的手动绑定监听逻辑,直接通过传入的元素操作类名:

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-forms',
  templateUrl: './forms.component.html',
  styleUrls: ['./forms.component.scss']
})
export class FormsComponent implements OnInit {

  constructor() { }

  ngOnInit(): void {
  }
      
  inpAnim(inputEle: HTMLInputElement){
    inputEle.classList.add("forms-field-inp-lbl-anim");
  }

  inpBlur(inputEle: HTMLInputElement){
    if(inputEle.value.trim() === ""){
      inputEle.classList.remove("forms-field-inp-lbl-anim");
    }
  }
}

3. SCSS无需修改

原SCSS中的类选择器规则可以正常匹配效果。

功能验证
  • 所有输入框聚焦时,对应标签自动上浮
  • 输入框失焦时如果内容为空,标签回落;如果有输入内容,标签保持上浮状态

内容的提问来源于stack exchange,提问作者TeckgeekARJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 02:39:02