当前位置: 首页 > 知识库问答 >
问题:

在角度上按enter键模糊输入字段

东郭远航
2023-03-14

我发现当有人按下“回车”键时,这个问题对于提交表单非常有用:

Javascript:

angular.module('yourModuleName').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': event});
                });

                event.preventDefault();
            }
        });
    };
});

超文本标记语言:

<div ng-app="" ng-controller="MainCtrl">
    <input type="text" ng-enter="doSomething()">    
</div>

我想知道的是,当按下“回车”键时,将字段设置为模糊。模糊sender字段的效果是什么?

我想保留ngEnter指令的原样,因为我想将其重新用于其他函数

更新:我知道我可以创建一个完整的指令来进行模糊处理(我现在就是这么做的),但我想做的是能够做这样的事情:

<input type="text" ng-enter="this.blur()">

或者如何将当前元素作为参数传递?

<input type="text" ng-enter="doBlur(this)">

共有3个答案

夏青青
2023-03-14

SoluableNonagon离它很近。你只需要使用正确的论点。该指令将事件参数声明为event,而不是event。您可以将指令更改为使用$event,就像ngClick所做的那样(或者保留它并将其用作ng enter=“doSomething(event)”

angular.module("app", [])
  .controller('MainController', MainController)
  .directive('myEnter', myEnter);

function MainController() {
  var vm = this;
  vm.text = '';
  vm.enter = function($event) {
    $event.target.blur();
    vm.result = vm.text;
    vm.text = '';
  }
}

myEnter.$inject = ['$parse'];

function myEnter($parse) {
  return {
    restrict: 'A',
    compile: function($element, attr) {
      var fn = $parse(attr.myEnter, null, true);
      return function(scope, element) {
        element.on("keydown keypress", function(event) {
          if (event.which === 13) {
            
            // This will pass event where the expression used $event
            fn(scope, { $event: event });
            scope.$apply();
            event.preventDefault();
          }
        });
      };
    }
  };
}
<script src="https://code.angularjs.org/1.4.8/angular.js"></script>

<div ng-app="app" ng-controller="MainController as view">
  <input my-enter="view.enter($event)" ng-model="view.text">
  <div ng-bind="view.result"></div>
</div>
国景铄
2023-03-14

对于角度2

<input ... (keydown.enter)='$event.target.blur()'>
尹欣怿
2023-03-14

在尝试了一系列操作之后,这似乎是不可能的,因为您需要传递$event来获取目标元素,所以单独的指令似乎是唯一的方法

我们的愿望:

您无法传递此,因为它引用范围,所以您需要传递事件。

<input type="text" ng-enter="doBlur($event)">

一旦你有了事件,你就可以从中获得目标。

$scope.doBlur = function($event){
    var target = $event.target;

    // do more here, like blur or other things
    target.blur();
}

但是,您只能在诸如ng click之类的指令中获得pass事件。。。有点不满意。如果我们可以在指令之外传递$event,我们就可以按照您要求的可重用方式进行模糊处理。

 类似资料:
  • 用AngularJS按回车键提交表单这个问题使用html5按钮,但我使用角度材质按钮作为 但是如何使用它呢

  • 问题内容: 我已经试过了: 给出错误: 问题答案: Keyup / Keydown仅限于WebDriver中的修饰键(Shift,Ctrl等)。我想你要

  • 问题内容: 我想在用户按下键盘上的Enter键时传递值。在事件中,我得到的价值,但在如何获得这个值是按键? 码: 问题答案: 使用事件,并在其中检查用户按下的键的键码。密钥的密钥代码为13,检查代码并在其中放置逻辑。 检查以下示例: 注意: 用Material-Ui 替换元素,并定义其他属性。

  • 我有一个有多个输入框的表单,当第一个输入框有焦点时,如果我按Enter键,那么路线就会改变并导航到某个地方。我怎样才能阻止它?

  • 我有一个角2+表单组,每个表单字段都有tabindex。 如何在每次按Enter键时将焦点更改为下一个表单字段(类似于按tab键)? JavaScript Reference-Enter键的行为类似于JavaScript中的标签

  • 问题内容: 我正在使用Selenium Server(v2.21)和SeleniumJavaClient(v.2.21.0)来自动化Web表单,该表单需要在每次输入后都按下键,因为字段是根据输入的值公开的。因此,根据此处的解决方案,我一直在尝试不同的方法以在表单中输入字符串并按-这是我尝试过的方法: 它会 看起来 像这是最合理的解决方案(),但是编译器抛出,如果你不添加一个错误,因为期待一个字符串