在这种特殊情况下,当我按Enter键时,我有什么选项可以让这些输入调用一个函数?
// HTML view //
<form>
<input type="text" ng-model="name" <!-- Press ENTER and call myFunc --> />
<input type="text" ng-model="email" <!-- Press ENTER and call myFunc --> />
</form>
// Controller //
.controller('mycontroller', ['$scope',function($scope) {
$scope.name = '';
$scope.email = '';
// Function to be called when pressing ENTER
$scope.myFunc = function() {
alert('Submitted');
};
}])
11 回答
使用ng-submit并将两个输入包装在单独的表单标记中:
将每个输入字段包装在自己的表单标记中允许ENTER在任一表单上调用提交 . 如果您为两者使用一个表单标记,则必须包含提交按钮 .
使用CSS类而不是重复内联样式会稍微整洁一些 .
CSS
HTML
FWIW - 这里's a directive I' ve用于基本确认/警报引导模式,无需
<form>
(只需为你喜欢的内容切换jQuery点击动作,并将
data-easy-dismiss
添加到你的模态标签中)Angular支持开箱即用 . 你在表单元素上试过ngSubmit吗?
编辑:根据有关提交按钮的评论,请参阅Submitting a form by pressing enter without a submit button,它给出了以下解决方案:
如果你不需要将控制器功能绑定到Enter键或键盘事件 . 这通常需要一个自定义指令,但AngularUI库已经设置了一个很好的keypress解决方案 . 见http://angular-ui.github.com/
添加angularUI lib后,您的代码将类似于:
或者您可以将Enter键压缩到每个单独的字段 .
另外,请参阅此SO问题以创建简单的keypres指令:How can I detect onKeyUp in AngularJS?
编辑(2014-08-28):在撰写本答案时,ng-keypress / ng-keyup / ng-keydown在AngularJS中不作为本机指令存在 . 在下面的评论中,@ darlan-alves有一个非常好的解决方案:
<input ng-keyup="$event.keyCode == 13 && myFunc()"... />
如果要在没有表单的情况下调用函数,可以使用我的ngEnter指令:
Javascript :
HTML :
我在my twitter和我的gist account上提交了其他令人敬畏的指令 .
如果您只有一个输入,则可以使用表单标记 .
如果您有多个输入,或者不想使用表单标记,或者想要将回车键功能附加到特定字段,则可以将其内联到特定输入,如下所示:
我想要一些比给定答案更具扩展性/语义性的东西,所以我写了一个指令,它以类似于内置_1391102的方式获取javascript对象:
HTML
在指令范围的上下文中评估对象的值 - 确保它们被单引号括起来,否则在加载指令时将执行所有函数(!)
例如:
esc : 'clear()'
而不是esc : clear()
Javascript
另一种方法是使用ng-keypress,
Submit an input on pressing Enter with AngularJS - jsfiddle
非常好,干净,简单的指令与转移输入支持:
If you want data validation too
这里重要的补充是
$loginForm.$valid
,它将在执行函数之前验证表单 . 您将不得不为验证添加其他属性,这超出了本问题的范围 .祝好运 .
只是想指出,在有一个隐藏的提交按钮的情况下,您可以使用ngShow指令并将其设置为false,如下所示:
HTML