Подтвердить что ты не робот

Клавиша Enter запускает событие нажатия?

В коде ниже removeSelectedCountry() должна вызываться, когда span элемента щелкнул и handleKeyDown($event) должен быть вызван, когда есть keydown событие на 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]
})

Но removeSelectedCountry() вызывается каждый раз, когда нажимается клавиша Enter.

Чтобы заставить код работать, мне пришлось изменить событие click событие mousedown. Теперь работает нормально.

Кто-нибудь может объяснить, почему клавиша Enter вызывает событие click?

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

Добавление класса снипппет:

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
    }    
}
4b9b3361

Ответ 1

Для клавиши ENTER, почему бы не использовать (keyup.enter):

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

Ответ 2

Используйте (keyup.enter).

Angular может фильтровать ключевые события для нас. Angular имеет специальный синтаксис для событий клавиатуры. Мы можем прослушать только клавишу Enter, привязав к псевдо-событию Angular keyup.enter.

Ответ 3

Вот правильный РЕШЕНИЕ! Так как кнопка не имеет определенного типа атрибута, angular может пытаться выдать событие keyup в качестве запроса на отправку и запускает событие click на кнопке.

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

Большое спасибо DeborahK!

Angular2 - Enter Key выполняет первую (щелчок) функцию, присутствующую в форме

Ответ 4

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

Это работает для меня!

Ответ 5

Для угловых 6 есть новый способ сделать это. К вашему входному тегу добавьте

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

Где keyUpFunction($event) - ваша функция.

Ответ 6

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