select to select all the text in the input as the value of the onFocus prop. e. target is the input element so we can call select on it to select all the text.
To select the all text in an input field, we can use the e. target. select() method in react. Here is an example of a functional react component, that selects the text by clicking on the input field.
HTML | DOM Input Text select() Method The DOM Input select() method selects all the text content of a textarea or an input element which contains the text field. Syntax: element. select();
The way to do this in Angular is to create a custom directive which does the autoselect for you.
module.directive('selectOnClick', ['$window', function ($window) {
return {
restrict: 'A',
link: function (scope, element, attrs) {
element.on('click', function () {
if (!$window.getSelection().toString()) {
// Required for mobile Safari
this.setSelectionRange(0, this.value.length)
}
});
}
};
}]);
Apply the directive like this:
<input type="text" value="test" select-on-click />
View demo
Update1: Removed jQuery dependency.
Update2: Restrict as attribute.
Update3: Works in mobile Safari. Allows selecting part of the text (requires IE>8).
Here's an enhanced directive which avoids reselecting the text when the user clicks to position the cursor in the input box.
module.directive('selectOnClick', function () {
return {
restrict: 'A',
link: function (scope, element) {
var focusedElement;
element.on('click', function () {
if (focusedElement != this) {
this.select();
focusedElement = this;
}
});
element.on('blur', function () {
focusedElement = null;
});
}
};
})
This is an old answer, for Angular 1.x
Better way to do it is by using the ng-click
built-in directive:
<input type="text" ng-model="content" ng-click="$event.target.select()" />
EDIT:
As JoshMB has kindly reminded; referencing DOM nodes in Angular 1.2+ is no longer allowed. So, I've moved $event.target.select()
into the controller:
<input type="text" ng-model="content" ng-click="onTextClick($event)" />
Then in your controller:
$scope.onTextClick = function ($event) {
$event.target.select();
};
Here is an example fiddle.
Neither of proposed solutions worked well for me. After quick research I came up with this:
module.directive('selectOnFocus', function ($timeout) {
return {
restrict: 'A',
link: function (scope, element, attrs) {
var focusedElement = null;
element.on('focus', function () {
var self = this;
if (focusedElement != self) {
focusedElement = self;
$timeout(function () {
self.select();
}, 10);
}
});
element.on('blur', function () {
focusedElement = null;
});
}
}
});
It's a mix of several solutions proposed, but works both on click and focus (think autofocus) and allows manual selection of partial value in the input.
For me, ng-click didn't have sense, because you could never reposition the cursor without selecting all text again, I found this was annoing. Then it is better to use ng-focus, because the text is selected only if the input was not focused, if you click again to reposition the cursor then the text just deselects, as expected, and you can write in between.
I found this approach to be the expected UX behaviour.
Use ng-focus
Option 1: separate code
<input type="text" ng-model="content" ng-focus="onTextFocus($event)" />
and in controller
$scope.onTextFocus = function ($event) {
$event.target.select();
};
Option 2: as an alternative you can join the code above into this "one-liner" (I didn't test this but it should work)
<input type="text" ng-model="content" ng-focus="$event.target.select()" />
No directives needed, just add onfocus="this.select()"
native javascript to the input element or text area.
In angular 2, this worked for me, both in Chrome & Firefox:
<input type="text" (mouseup)="$event.target.select()">
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With