85 votes

Dans angular2, la touche enter déclenche-t-elle un événement de clic sur la page?

Dans le code ci - removeSelectedCountry() doit être appelée lorsque la durée de l'élément est cliqué et handleKeyDown($event) doit être appelé lorsqu'il y a un événement keydown sur la 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]
})

Mais removeSelectedCountry() est appelée à chaque fois que la touche entrée est pressée.

Pour rendre le code du travail, j'ai dû changer l'événement click d' mousedownévénement. Il fonctionne très bien maintenant.

Quelqu'un peut-il expliquer pourquoi la touche enter pourrait déclencher un événement de clic?

@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]
})

Ajout de la classe de 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
    }    
}

157voto

AngJobs on Github Points 5111

Pour la touche ENTER, pourquoi ne pas utiliser (keyup.enter) :

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

69voto

Andrew Lobban Points 1012

Ici est la bonne SOLUTION! Depuis le bouton n'est pas définie pour l'attribut type, angulaire peut-être tenter de délivrer l'événement keyup comme une soumettez la demande et déclenche l'événement click sur le bouton.

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

Un grand merci à DeborahK!

Angular2 - Touche Entrée s'exécute en premier (cliquez) fonction sur la forme

41voto

Farhan Points 281

Utilisez (keyup.enter) .

Angular peut filtrer les événements clés pour nous. Angular a une syntaxe spéciale pour les événements de clavier. Nous pouvons écouter uniquement la touche Entrée en nous liant au pseudo-événement keyup.enter de Angular.

15voto

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

Cela fonctionne pour moi!

4voto

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X