Reputation: 39
I have the following code and need to trigger a function when the user presses enter to choose from an option.
If I use (click) event, everything works as expected, however this will only execute the function on click, which is not great for UX.
<form (ngSubmit)="onCreatePost(formData.value)" #formData="ngForm" autocomplete="off" class="form">
<select name="name" ngModel>
<option value="" disabled selected>Choose language</option>
<option *ngFor="let language of languageList" (keydown.enter)="getLanguageCode(language.code)">{{ language.name }}</option>
</select>
<input type="text" name="code" [ngModel]="langCode">
<button type="submit" class="button-primary" [disabled]="!formData.valid"><i class="fas fa-plus-circle margin"></i>Submit</button>
</form>
Upvotes: 0
Views: 1900
Reputation: 104
try adding on onchange event listener on the select element. The onchange event should trigger irrespective of whether you are using a mouse or keyboard to select the options.
Upvotes: 0
Reputation: 183
var app=angular.module("myapp",[]);
app.directive('myEnter', function () {
return function (scope, element, attrs) {
element.bind("keydown keypress", function (event) {
if(event.which === 13) {
alert("Enter is Pressed");
event.preventDefault();
}
});
};
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
<div ng-app="myapp">
<input type="text" my-enter="doSomething()">
</div>
alternative is to use standard directive ng-keypress="myFunct($event)"
$scope.myFunct = function(keyEvent) {
if (keyEvent.which === 13)
alert('I am an alert');
}
Upvotes: 0
Reputation: 2614
Try to use (keydown.enter)
on select
instead of each option. I used it on form and works fine.
Upvotes: 2