JavaScript 的 .select() 方法仅在第二次尝试时触发

标签 javascript css angularjs chromium

使用 Angular,我正在尝试实现一种通过单击“编辑”按钮来更改值的方法,当单击此按钮时,输入显示在文本上,而当“保存”单击按钮,输入的不透明度变为 0,并应用模型的值。

我创建了一个 jsfiddle 来使我的问题更加直观。 JSFIDDLE DEMO

问题如下:我想选择文本,让用户知道在单击“编辑”按钮后现在可以更改它。我这样做:

var input = angular.element(document.querySelector('input'))[0];
input.focus();
input.select();

唯一的问题是 input.select() 仅在第二次尝试时有效。你可以在演示中看到它。我对此没有任何合理的解释。我需要指出的是,我正在编写的这个应用程序是为 Electron 编写的,这意味着它只会在 Chromium 中启动,因此我不需要为此提供跨浏览器支持。

第一次单击“编辑”按钮时,不会发生任何选择:

What happens when the 'Edit' button is clicked for the first time

但是当我点击“保存”然后再次点击“编辑”时,一切都按预期进行:

enter image description here

任何想法将不胜感激!

最佳答案

使用$timeout,会触发摘要循环

var app = angular.module('app', []);

app.controller('mainController', function($timeout,$scope) {
  var vm = this;
  vm.address = '127.0.0.1';
  vm.name = 'anabelbreakfasts';
  vm.editing = {
    address: false
  };
  vm.temp = {
    address: null
  };

  vm.changeClick = function(element) {
    vm.editing[element] = !vm.editing[element];
    if (vm.editing[element]) {
      vm.temp[element] = vm[element];
      var input = angular.element(document.querySelector('div.row.' + element + ' input'))[0];
      $timeout(function(){
        input.focus(); 
        input.select();
      });
    } else {
      vm[element] = vm.temp[element];
    }
  };
});

Fiddle

关于JavaScript 的 .select() 方法仅在第二次尝试时触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35333869/

相关文章:

javascript - 使用手动参数 FETCH 主干数据收集

html - 如何在不使用不良做法的情况下内联 H2 和 HR 标签?

jquery - 按播放/暂停按钮停止和开始 gif

javascript - 带有 AngularJS 的 PHPMailer

angularjs - Ratchet websocket 响应不会改变

javascript - 编辑名称时,在 AngularJS 的下拉菜单上显示相同名称的项目

javascript - 在 Typescript 中声明类型时,类型 'never[]' 的参数不可分配给类型 'never' 的参数

javascript - 当其中一个字段是数组时如何更改状态对象?

javascript - 我应该在哪里声明在 useEffect() Hook 中调用的函数?

php - 如何让一个页面中所有不同尺寸的图片高度和宽度相同?