"粘贴“;Angular[ngPaste]中的事件
"Paste" event in Angular [ngPaste]
如何在Angular 1.1.5中的输入中执行"粘贴"事件的函数?我知道有一个ng-change
指令用于输入。但每次输入更改时它都会启动,我只需要在初始粘贴时启动一次。
用例:我有一个URL输入。我想在用户粘贴URL后执行一个函数。用户还可以手动输入URL并按enter键执行功能。
--
更新:由于Angular 1.2.0,ngPaste是一个本机指令。
由于Angular 1.2.0有一个ngPaste指令。使用以下方式:
<input type='text' ng-paste='handlePaste($event)'>
要直接传递值,请使用:
<input type='text' ng-paste='handlePaste($event.clipboardData.getData('text/plain'))'>
在函数中,您应该使用originalEvent
<input type="text" ng-paste="paste($event)" />
功能:
$scope.paste = function (e) {
console.log(e.originalEvent.clipboardData.getData('text/plain'));
}
想分享我的解决方案,以支持没有剪贴板API的浏览器。这应该适用于angular支持的任何浏览器。
HTML:
<input type="text" ng-paste="copyPasted($event)">
JS:
$scope.copyPasted = function ($event){
if(typeof $event.originalEvent.clipboardData !== "undefined"){
$scope.handlePastedData($event.originalEvent.clipboardData.getData('text/plain'));
} else { // To support browsers without clipboard API (IE and older browsers)
$timeout(function(){
$scope.handlePastedData(angular.element($event.currentTarget).val());
});
}
};
我已经实现了这个解决方案,以针对当前输入选择(IE11也支持)使用自定义过滤器来清除粘贴的文本
JS:
vm.pasteInput = pasteInput;
function pasteInput(ev){
var pastedData ='';
var domElement = ev.currentTarget;
if(typeof ev.originalEvent.clipboardData !== "undefined"){
pastedData = ev.originalEvent.clipboardData.getData('text/plain');
} else if(window.clipboardData){
pastedData = window.clipboardData.getData('Text');
ev.returnValue = false;
}
pastedData = $filter('inputtext')(pastedData);
// inject in correct position between selection
if (document.selection) { // IE11
domElement.focus();
var sel = document.selection.createRange();
sel.text = pastedData;
domElement.focus();
} else if (domElement.selectionStart || domElement.selectionStart === 0){
var startPos = domElement.selectionStart;
var endPos = domElement.selectionEnd;
domElement.value = domElement.value.substring(0, startPos) + pastedData + domElement.value.substring(endPos, domElement.value.length);
domElement.focus();
domElement.selectionStart = startPos + pastedData.length;
domElement.selectionEnd = startPos + pastedData.length;
} else {
domElement.value += pastedData;
domElement.focus();
}
ev.stopPropagation();
ev.preventDefault();
// update model
vm.input.value = domElement.value;
}
HTML:
<input type="text" ng-model="vm.input.value" ng-paste="vm.pasteInput($event)" />
相关文章:
- 分派点击事件并保留击键修饰符
- 模糊事件的Javascript测试
- keyup事件处理程序更改焦点不适用于快速键入
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 如何使Javascript动态html表及其上的事件
- 使用类从一个标记中双击事件
- 如何在未直接触发的情况下停止事件
- 如何在elfinder插件(一个文件管理器插件)上获得上传前事件
- 对iPad上的点击事件反应缓慢
- 事件和状态
- Fancybox是否将Click事件静音
- 主干-不管怎样,检查事件以前是否绑定过
- 从控制器返回后Ajax启动事件激发
- 如何从画布上的某个移动事件中获取X和Y
- Jquery:未触发select事件
- JsFiddle上的鼠标事件不起作用
- 只覆盖箭头键滚动事件
- $window.ga在AngularJS事件中未定义
- cron作业与Javascript计时事件
- "粘贴“;Angular[ngPaste]中的事件