javascript - Angular โฟกัสที่อินพุตขณะคลิกที่องค์ประกอบ
ฉันได้แนบ stackblitz ไว้ด้านล่าง
https://stackblitz.com/edit/angular-dgx3pe
สิ่งที่ฉันพยายามทำให้สำเร็จคือเมื่อคลิกที่องค์ประกอบป้ายกำกับ มันควรจะโฟกัสไปที่อินพุต ดังนั้นคลาส input:focus จะถูกเปิดใช้งาน สิ่งที่ฉันเชื่อคือมันสามารถทำได้ผ่าน javascript/jquery แต่ฉันชอบวิธีของ Angular ในการทำสิ่งนี้
สรุปแล้ว นี่คือสองสิ่งที่ฉันพยายามทำ
- ให้โฟกัสที่องค์ประกอบป้อนข้อมูลเมื่อคลิกที่ป้ายกำกับ
- เมื่อโฟกัสถูกเปลี่ยนไปยังองค์ประกอบการป้อนข้อมูลอื่นและถ้าองค์ประกอบก่อนหน้าไม่ว่างเปล่า (หากมีการพิมพ์ค่าใดค่าหนึ่งเข้าไป) ป้ายควรรักษาตำแหน่งของมันที่ด้านบน
เอชทีเอ็มแอล
<input class="input" type="text">
<label class="label">Name</label>
<div>
<input class="input" type="text">
<label class="label">Name</label>
</div>
ซีเอสเอส
p {
font-family: Lato;
}
.input
{
border:none;
border-bottom:1px solid grey;
outline:none;
margin-top:20%;
}
.input:focus
{
border-bottom:1px solid orange;
}
.label
{
position:relative;
left:-170px;
}
.input:focus + .label
{
bottom:20px;
}
คำตอบ #1
- ใน HTML ให้เพิ่มการอ้างอิงถึงข้อความป้อนข้อมูลของคุณ - #firstNameField และเพิ่มเมธอดให้กับอีเวนต์คลิกของป้ายกำกับ - (click)="focusOnFirstName()"
<input #firstNameField class="input" type="text">
<label class="label" (click)="focusOnFirstName()">First Name</label>
- ในคอมโพเนนต์ของคุณ ประกาศ ViewChild และสร้างเมธอดเพื่อคลิกที่ฟิลด์ป้ายชื่อ
@ViewChild("firstNameField") firstNameField;
focusOnFirstName(){
this.firstNameField.nativeElement.focus();
}
คำตอบ #2
คุณสามารถทำสิ่งนี้ด้วยมาร์กอัปบริสุทธิ์ คุณต้องเพิ่ม id ให้กับ input และเพิ่ม for ให้กับ label
<input class="input" type="text" id="firstName">
<label class="label" for="firstName" >First Name</label>
นี่เป็นเพียงส่วนหนึ่งของสเปค HTML - ป้ายสามารถเชื่อมโยงกับอินพุตได้ - ฟังก์ชันการทำงานเริ่มต้นที่นี่คือเมื่อคลิกที่ป้าย จะตั้งโฟกัสไปยังอินพุตที่เชื่อมโยง id และ for ต้องตรงกันเพื่อให้สิ่งนี้ทำงานได้.
สำหรับส่วนที่สองของคำถามของคุณ และเพื่อใช้คลาส css ของคุณซ้ำ - เพิ่มตัวแปรที่ตรงกันไปยังคอมโพเนนต์ของคุณ ใช้ ngClass เพื่อเพิ่มคลาส .go-top เมื่อค่าของตัวแปรมีค่า
ในชิ้นส่วน -
firstName: string;
จากนั้นใน html -
<input class="input" type="text" id="firstName" [(ngModel)]="firstName">
<label class="label" for="firstName" [ngClass]="{'go-top': firstName}">First Name</label>
