入力が必要な単純なフォームを次に示します。
<div ng-controller="MainCtrl">
<form name="add-entry" press-enter="add_entry()">
<input type="text" ng-model="amount" required />
<!-- <input type="submit" value="Add" /> -->
</form>
</div>
フォームはカスタムの pressEnter ディレクティブを使用します。これ<input type="submit" />
は、マークアップで を使用することに消極的であるためです。たとえ絶対位置などで非表示にできたとしても (ngSubmit
代わりに を使用pressEnter
すると、式を起動するためにこれらのいずれかが必要になります)。
angular.module('app', []).directive('pressEnter', function() {
return function(scope, element, attrs) {
element.bind("keydown keypress", function(event) {
if(event.which === 13) {
scope.$apply(function(){
scope.$eval(attrs.pressEnter);
});
event.preventDefault();
}
});
};
});
ここでの問題は、 がないとrequired
属性も考慮されないことngSubmit
です。http://jsfiddle.net/w6QHD/12/を参照してください。空の入力で Enter キーを押すと、引き続き起動することがわかりますadd_entry()
。ngSubmit
の代わりにを使用しpressEnter
、コメントを外した場合にのみ、フォームが検証され<input type="submit">
ます。
を使用せずにフォーム検証を機能させるにはどうすればよいngSubmit
ですか?