javascript - Klickhändelse i ul- och li-undersammansättningsmeny från inmatningsfält, det är en förslagsfält
Jag vill ha en klickfunktion på listobjektet som kommer att utlösa en funktion i komponenten och också fylla i inmatningsfältet.
Hittills har jag försökt använda (click), (ngModelChange) och (change), men inget av detta verkar fungera. Det verkar som att jag inte kan klicka på rullgardinslistan.
MALL
<input type="text" class="form-control form-rounded" [formControl]="queryField" placeholder="Search" (blur)="myFunction()" (focus)="myFunction1()" />
<ul class="filter-select form-rounded" >
<li class="filter-select-list" *ngFor="let result of results"
(click)="selectedProduct($event)">
{{result.productName}}
</li>
</ul>
KOMPONENT
selectedProduct(){
console.log('Hello');
}
CSS
.filter-select {
position: absolute;
list-style: none;
padding : 0;
z-index: 99;
border-bottom: none;
border-top: none;
border: 1px solid gainsboro;
top: 100%;
left: 0;
right: 0;
background-color: white;
}
.filter-select-list{
display: flex;
padding: 10px;
cursor: pointer;
background-color: #fff;
border-bottom: 1px solid #d4d4d4;
}
.filter-select-list:hover{
background-color:gainsboro;
}
Jag vill att funktionen ska aktiveras.
Svar #1
Sätt [(ngModel)] och vid klick på li, skicka result.name så här: (click)="selectedProduct(result.productName)" eftersom $event bara fungerar med form-input och inte <li> eller <div>
Mall :
<input type="text" class="form-control form-rounded" [(ngModel)]="queryField" placeholder="Search" (blur)="myFunction()" (focus)="myFunction1()" />
<ul class="filter-select form-rounded" >
<li class="filter-select-list" *ngFor="let result of results"
(click)="selectedProduct(result.productName)">
{{result.productName}}
</li>
</ul>
TS :
selectedProduct(event) {
this.queryField = event
}
Funktionerande demo
Svar #2
För att uppnå förväntat resultat, gör följande ändringar
Vid klick, skicka result istället för $event -
(click)="selectedProduct(result)"Uppdatera värdet på
queryFieldmed hjälp avsetValue()-metoden.
selectedProduct(val){ this.queryField.setValue(val.productName); }
fungerande kod för referens - https://stackblitz.com/edit/angular-yz2nr2?file=src/app/app.component.ts
app.component.ts
import { Component } from '@angular/core';
import { FormControl } from '@angular/forms';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
queryField = new FormControl('');
results = [
{productName:"p1"},
{productName:"p2"},
{productName:"p3"}
]
selectedProduct(val){
this.queryField.setValue(val.productName);
}
}
app.component.html
<input type="text" class="form-control form-rounded" [formControl]="queryField" placeholder="Search" (blur)="myFunction()" (focus)="myFunction1()" />
<ul class="filter-select form-rounded" >
<li class="filter-select-list" *ngFor="let result of results"
(click)="selectedProduct(result)">
{{result.productName}}
</li>
</ul>
