Im folgenden Code removeSelectedCountry()
sollte aufgerufen werden, wenn auf ein span
Element geklickt wird, und handleKeyDown($event)
sollte aufgerufen werden, wenn sich ein keydown
Ereignis auf einem befindet div
.
@Component({
selector: "wng-country-picker",
template: `
<ul class="CountryPicker-selected" *ngIf="selectedCountries.length > 0">
<li *ngFor="let country of selectedCountries">
<span class="Pill Pill--primary" (click)="removeSelectedCountry(country)">
{{ country.name }}
</span>
</li>
</ul>
<div (keydown)="handleKeyDown($event)" class="CountryPicker-input"></div>
`,
providers: [CUSTOM_VALUE_ACCESSOR]
})
Wird removeSelectedCountry()
aber jedes Mal aufgerufen, wenn die EnterTaste gedrückt wird.
Damit der Code funktioniert, musste ich das click
Ereignis in mousedown
Ereignis ändern . Es funktioniert jetzt gut.
Kann jemand erklären, warum der EnterSchlüssel das click
Ereignis auslösen würde ?
@Component({
selector: "wng-country-picker",
template: `
<ul class="CountryPicker-selected" *ngIf="selectedCountries.length > 0">
<li *ngFor="let country of selectedCountries">
<span class="Pill Pill--primary" (mousedown)="removeSelectedCountry(country)">
{{ country.name }}
</span>
</li>
</ul>
<div (keydown)="handleKeyDown($event)" class="CountryPicker-input"></div>
`,
providers: [CUSTOM_VALUE_ACCESSOR]
})
Hinzufügen eines Klassen-Snipppet:
export class CountryPickerComponent {
private selectedCountries: CountrySummary[] = new Array();
private removeSelectedCountry(country: CountrySummary){
// check if the country exists and remove from selectedCountries
if (this.selectedCountries.filter(ctry => ctry.code === country.code).length > 0)
{
var index = this.selectedCountries.indexOf(country);
this.selectedCountries.splice(index, 1);
this.selectedCountryCodes.splice(index, 1);
}
}
private handleKeyDown(event: any)
{
if (event.keyCode == 13)
{
// action
}
else if (event.keyCode == 40)
{
// action
}
else if (event.keyCode == 38)
{
// action
}
}
angular
dom-events
Pranavi Chandramohan
quelle
quelle
(keyup.enter)
würde also nicht helfenHier ist die richtige LÖSUNG ! Da die Schaltfläche keinen definierten Attributtyp hat, versucht Angular möglicherweise, das Keyup-Ereignis als Übermittlungsanforderung auszugeben, und löst das Klickereignis auf der Schaltfläche aus.
Vielen Dank an DeborahK!
Angular2 - Enter Key führt die erste (Klick-) Funktion aus, die im Formular vorhanden ist
quelle
<span>
Verwenden Sie
(keyup.enter)
.Angular kann die wichtigsten Ereignisse für uns filtern. Angular hat eine spezielle Syntax für Tastaturereignisse. Wir können nur auf die Eingabetaste warten, indem wir an Angulars
keyup.enter
Pseudoereignis binden .quelle
Für Winkel 6 gibt es eine neue Methode. Fügen Sie auf Ihrem Eingabe-Tag hinzu
Wo
keyUpFunction($event)
ist deine Funktion?quelle
Das funktioniert bei mir!
quelle
quelle
keyCode
ist veraltet ..key
stattdessen verwendenWas mich persönlich für mich nutzbar macht, ist:
keyup.enter
verhindert, dass das Ereignis beim Keyup ausgelöst wird, aber es tritt immer noch bei Keydown auf, was für mich funktioniert.quelle