在元素中选择文本

时间:2017-08-01 09:40:54

标签: javascript jquery angularjs angular-directive

我有一个input元素,并且使用ng-model在其中包含文本,然后我尝试通过创建自定义侦探来选择所有文本:

.directive('selectText', function() {
    return {
        require: 'ngModel',
        link: function(scope, elem, attrs, ctrl) {
            elem.bind('focus', function() {
                $(elem).select();
            });
            scope.$watch("edit",function(newValue,oldValue) {
                $(elem).select();
            });
        }
    };
})

效果很好,但我也不希望在用户foucusout来自控件和focusin时再次选择该文本。它应该只选择一次文本(而不是第二次焦点)。 另外,当选择所有文本时,如何从元素中删除焦点?

2 个答案:

答案 0 :(得分:0)

如果选择了元素,您可以创建将保留布尔值的变量,并且仅当它尚未被选中时才选择元素。像这样:

.directive('selectText', function() {
    return {
        require: 'ngModel',
        link: function(scope, elem, attrs, ctrl) {
            var selected = false;
            elem.bind('focus', function() {
                if (!selected) {
                    $(elem).select();
                    selected = true;
                }
            });
            scope.$watch("edit",function(newValue,oldValue) {
                $(elem).select();
            });
        }
    };
})

答案 1 :(得分:0)

csc
function Ctrl3($scope) {
  $scope.title = 'My relevant title';
}

angular.module('scopePropertiesModule', [])
  .directive('selectText', function() {
    return {
      require: 'ngModel',
      link: function(scope, elem, attrs, ctrl) {
        var counter = 0;
        elem.bind('focus', function() {
          console.log(counter)

          if (counter < 1) {
            $(elem).select();
            /*setTimeout(function() {
              $(elem).blur();
            }, 1000);*/
            
            counter++;
          }
        });
        scope.$watch("edit", function(newValue, oldValue) {
          $(elem).select();
        });
      }
    };
  })

检查一下。