如何将Escape上的输入字段重置为上一个值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将Escape上的输入字段重置为上一个值相关的知识,希望对你有一定的参考价值。

当按下转义键时,将输入字段设置为其先前值的正确方法是什么?

我找到了这个指令:

.directive('resetWithEsc', function() {
    return {
        restrict: 'A',
        require: '?ngModel',
        link: function(scope, element, attrs, controller) {
            element.on('keydown', function(ev) {
                if (ev.keyCode != 27) return;

                scope.$apply(function() {
                    controller.$setViewValue("");
                    controller.$render();
                });
            });
        }
    };
})

但它说TypeError: Cannot read property '$setViewValue' of null

我也试图存储prev。 $ scope.temp中的值和用于检测ESC的used指令:

.directive('escKey', function () {
    return function (scope, element, attrs) {
        element.bind('keyup', function (event) {
            console.log("UP");
            if(event.which === 27) { // 27 = esc key
                console.log("ESC");
                scope.$apply(function (){
                    scope.$eval(attrs.escKey);
                });
                event.preventDefault();
            }
        });
    };
})

然后我像这样使用它:

<input data-ng-focus="temp = mymodel.value"
    ng-model-options="{updateOn: 'blur'}" esc-key="mymodel.value = temp" 
    type="text" data-ng-model="mymodel.value"
/>

它检测到正确的转义键,如果我设置esc-key="mymodel.value = 'TEST'"它也将输入字段设置为'TEST',但是使用变量它不起作用。

那么最好的选择是什么?我需要它动态用于重复循环。

答案

删除updateOn: 'blur'和重置temp做了伎俩......

<input data-ng-focus="temp = mymodel.value"
    esc-key="mymodel.value = temp; temp='';" 
    type="text" data-ng-model="mymodel.value"
/>

对于更清洁的解决方案仍然感到高兴,因为喜欢仅在模糊时更新模型。

另一答案

我拿了@Bharat的plunker示例并调整它以使用指令。

(function(angular) {
  'use strict';
  angular.module('optionsExample', [])
    .controller('ExampleController', ['$scope', function($scope) {
      $scope.users = [
        {
          name: 'name1',
          data: ''
        },
        {
          name: 'name2',
          data: ''
        },
        {
          name: 'name3',
          data: ''
        },
      ];
    }])
    .directive('escape', function() {
      return {
        require: 'ngModel',
        link: function(scope, element, attrs, ngModel) {
          element.bind('keyup', function (event) {
            if(event.which === 27) { // 27 = esc key
              ngModel.$rollbackViewValue();
              event.preventDefault();
            }
          });
        }
      }
    });
})(window.angular);
<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>Example - example-ngModelOptions-directive-blur-production</title>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.7.5/angular.min.js"></script>
    <script src="app.js"></script>
  </head>

  <body ng-app="optionsExample">
    <div ng-controller="ExampleController">
      <form name="userForm">
        <ul>
          <li data-ng-repeat="user in users">
            <label>Name:
              <input
                type="text"
                name="userName{{$index}}"
                ng-model="user.name"
                escape
                ng-model-options="{updateOn: 'blur change'}"/>
            </label>
            <br />
            <pre>user.name = <span ng-bind="user.name"></span></pre>
          </li>
        </ul>
      </form>
    </div>
  </body>

</html>

以上是关于如何将Escape上的输入字段重置为上一个值的主要内容,如果未能解决你的问题,请参考以下文章

如何通过按 Escape 键重置 QLineEdit 文本?

如何以 redux 形式重置初始值

使用 VB6 将 DAO 日期时间字段重置为空

单击R Shiny中的按钮后将输入字段重置为null

Reactstrap Form 重置输入值 MERN 堆栈

重置数据库中的自动编号(身份字段)