Löst die Eingabetaste ein Klickereignis aus?


74

Im folgenden Code removeSelectedCountry()sollte aufgerufen werden, wenn auf ein spanElement geklickt wird, und handleKeyDown($event)sollte aufgerufen werden, wenn sich ein keydownEreignis 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 clickEreignis in mousedownEreignis ändern . Es funktioniert jetzt gut.

Kann jemand erklären, warum der EnterSchlüssel das clickEreignis 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
    }    
}

Antworten:


145

Verwenden Sie für die EINGABETASTE Folgendes (keyup.enter):

@Component({
  selector: 'key-up3',
  template: `
    <input #box (keyup.enter)="values=box.value">
    <p>{{values}}</p>
  `
})
export class KeyUpComponent_v3 {
  values = '';
}

1
Ich muss eine Aktion basierend auf der gedrückten Taste ausführen, (keyup.enter)würde also nicht helfen
Pranavi Chandramohan

Sie könnten alle 3 Ereignisse wie keyup.xxx
AngJobs auf Github

46

Hier 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.

<button type="button" ...></button>

Vielen Dank an DeborahK!

Angular2 - Enter Key führt die erste (Klick-) Funktion aus, die im Formular vorhanden ist


1
Leider gibt es im obigen Formular keine Schaltflächenkomponente. Der Klick wurde auf einem<span>
Pranavi Chandramohan

Es ist ein Vorschlag für eine Problemumgehung, da andere so geneigt sind.
Andrew Lobban

Genaue Antwort, mir fehlte das Typattribut.
Muhammad Kashif

39

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.enterPseudoereignis binden .


17

Für Winkel 6 gibt es eine neue Methode. Fügen Sie auf Ihrem Eingabe-Tag hinzu

(keyup.enter)="keyUpFunction($event)"

Wo keyUpFunction($event)ist deine Funktion?


14
@Component({
  selector: 'key-up3',
  template: `
    <input #box (keyup.enter)="doSomething($event)">
    <p>{{values}}</p>
  `
})
export class KeyUpComponent_v3 {
  doSomething(e) {
    alert(e);
  }
}

Das funktioniert bei mir!


4
<form (keydown)="someMethod($event)">
     <input type="text">
</form>
someMethod(event:any){
   if(event.keyCode == 13){
      alert('Entered Click Event!');
   }else{
   }
}

1
keyCodeist veraltet .. keystattdessen verwenden
Johannes

0

Was mich persönlich für mich nutzbar macht, ist:

(mousedown)="callEvent()" (keyup.enter)="$event.preventDefault()

keyup.enter verhindert, dass das Ereignis beim Keyup ausgelöst wird, aber es tritt immer noch bei Keydown auf, was für mich funktioniert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.