Reputation: 161
I want to disable copy paste in a textarea using angularJs. I tried to do so with ng-paste, like so:
Controller:
angular.module('inputExample', [])
.controller('ExampleController', ['$scope', function($scope) {
$scope.val = '1';
$scope.past = function() {
console.log("d");
$scope.val =" ";
}
}]);
HTML:
<input ng-paste="past()" ng-model="val" ng-pattern="/^\d+$/" name="anim" class="my-input" />
Input box has old data ( the initial paste data).
Blocking paste works the second time around, that is if I paste the data into input box, the data will be present, but on a second paste the data won't paste, but the old data value is not removed.
Upvotes: 14
Views: 28040
Reputation: 8267
The simplest way:
<input ng-paste="$event.preventDefault();" placeholder='You cannot past here'>
Working here
Upvotes: 21
Reputation: 2854
Try making a directive that listens fot the cut
, copy
, and paste
events and then prevent the default event action.
app.directive('stopccp', function(){
return {
scope: {},
link:function(scope,element){
element.on('cut copy paste', function (event) {
event.preventDefault();
});
}
};
});
Use by adding the attribute to the input box.
<input stopccp ng-model="val" />
You could also use the ng-copy
, ng-cut
and ng-paste
directives and directly cancel the event.
<input ng-cut="$event.preventDefault()" ng-copy="$event.preventDefault()" ng-paste="$event.preventDefault()" ng-model="val" />
Upvotes: 32
Reputation: 1384
Try this;
<input type="text" ng-paste="paste($event)" ng-model="name"/>
In Controller
app.controller('MainCtrl', function($scope) {
$scope.name = 'World';
$scope.paste = function(e){
e.preventDefault();
return false
}
});
Upvotes: 2
Reputation: 21901
you can do like this
app.controller('MainCtrl', function($scope, $timeout) {....
.......
$scope.past = function() {
$timeout(function() {
$scope.val = " ";
}, 0);
}...
here is the Demo Plunker
Upvotes: 0