如何使用Aurelia捕捉输入元素的返回?
在angularjs中,我有以下几点:如何使用Aurelia捕捉输入元素的返回?,aurelia,Aurelia,在angularjs中,我有以下几点: app.directive('ngEnter', function () { return function (scope, element, attrs) { element.bind("keydown keypress", function (event) { if(event.which === 13) { scope.$apply(function (){ sco
app.directive('ngEnter', function () {
return function (scope, element, attrs) {
element.bind("keydown keypress", function (event) {
if(event.which === 13) {
scope.$apply(function (){
scope.$eval(attrs.ngEnter);
});
event.preventDefault();
}
});
};
});
html是:
<input type="text" ng-model="searchText" class="form-control"
placeholder="Search"
ng-enter="search($event, searchText)">
基本上,一旦我输入完要搜索的文本,当我按下回车键时,控制器上的搜索功能就会运行
在奥雷利亚我该怎么做
我仍在学习它的功能,因此非常感谢您的帮助。最简单的方法是将
输入
包装在表单
元素中,并绑定到表单的提交
事件
<form role="form" submit.delegate="search()">
<div class="form-group">
<label for="searchText">Search:</label>
<input type="text" value.bind="searchText"
class="form-control" id="searchText"
placeholder="Search">
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
搜索:
提交
这将为您提供与上面构建的相同的行为。我仍在努力创建一个自定义属性的示例来实现这一点,但老实说,我建议您这样做(当用户按enter键时捕获)。这似乎不受开箱即用的支持。虽然不完美,但我打算做以下几点:
- 在我的表单顶部添加一个隐藏的提交按钮,带有
属性click.delegate
- 单击我的虚拟机时,在虚拟机中运行一些代码。此代码将根据我需要的任何自定义逻辑决定如何使用enter键
<input keypress.delegate="doSomething($event)" />
当您有许多输入具有不同的回车键行为时,这将稍微干净一些 我认为角度中心的另一种选择是:
import{customAttribute,inject}来自'aurelia framework';
@customAttribute('enter-press')
@注入(元素)
出口级企业{
元素:元素;
价值:功能;
按enterPressed:(e:键盘事件)=>无效;
构造函数(元素){
this.element=元素;
this.enterPressed=e=>{
设key=e.which | | e.keyCode;
如果(键===13){
this.value();//“this”不会更改,因此您可以在“called”方法中访问VM属性
}
};
}
附({
this.element.addEventListener('keypress',this.enterPressed);
}
分离的(){
this.element.removeEventListener('keypress',this.enterPressed);
}
}
由于默认情况下,在
块中输入文本时,由于按键按钮.delegate
和按键按钮.trigger
的缘故,您的函数必须返回true以避免它,如下所示:
doSomething(事件){
if(event.which==13){
log('您的代码在这里!');
event.preventDefault();
返回false;
}
返回true;
}
我认为标记为angularjs是无效的,因为您希望在另一个框架上执行某些操作。回答这个问题不需要知道angularjs,这绝对是一种方法。在表单中包装将启用所有其他所需的行为,包括可选的重置按钮。当您有多个按钮时,这似乎不起作用(至少在Chrome中不起作用)。如果您想将一个窗体内的enter键绑定到不同的操作,这也将不起作用,具体取决于这些操作在窗体中的确切位置。+1到此值。几天前,我有一个类似的场景,当我把它包装在一个表单标签中(老实说,如果你生成了正确的语义HTML5代码,你无论如何都应该这样做),我不仅得到了回报,而且我的标签功能又开始工作了,它帮助aurelia auth更好地进行验证,除了我注意到按钮点击验证正确,但进入将通过它。Search()函数需要测试验证,如下所示:Search(){this.controller.validate().then(result=>{if(result.valid){…我原来有validate().then()=>…另外,如果“test--”在搜索文本框中由于“-”而无效您还需要测试它将指向的路径,这意味着您不能直接执行类似操作:@Kamil的答案是最好和最通用的解决方案。keypress.delegate
和keypress.trigger
在一个
块中输入文本非常好的答案。谢谢Kamil。我也使用此解决方案进行详细说明cting ctrl+enter按我的文本区域。哪个键的代码是10。这是最好的解决方案,应该标记为答案。
doSomething(event) {
if(event.which == 13) {
alert('Your code goes here!');
}
event.preventDefault();
}