我有一个jquery令牌tagit插件,我想绑定到paste事件以正确添加项目。
我可以像这样绑定到粘贴事件:
.bind("paste", paste_input)
...
function paste_input(e) {
console.log(e)
return false;
}
如何获得实际粘贴的内容值?
Answers:
有一个onpaste事件可在现代浏览器中使用。您可以使用对象getData
上的功能访问粘贴的数据clipboardData
。
$("#textareaid").bind("paste", function(e){
// access the clipboard using the api
var pastedData = e.originalEvent.clipboardData.getData('text');
alert(pastedData);
} );
请注意,从jQuery 3开始不推荐使用bind和unbind。首选的调用是on。
所有现代浏览器都支持Clipboard API。
另请参阅:在Jquery中如何处理粘贴?
e.originalEvent.clipboardData.getData('text/plain')
为我工作
window.clipboardData.getData('text')
paste
和input
事件添加事件处理paste
程序,在事件处理程序上设置标志,然后在事件处理程序中检查该标志input
。在其中,this.value
是粘贴的值,这在IE11中有效。
怎么样:http : //jsfiddle.net/5bNx4/
.on
如果您使用的是jq1.7等,请使用。
行为:当您paste
在第一个文本区域中键入任何内容时,下面的teaxtarea会捕获到cahnge。
休息,我希望它可以帮助事业。 :)
有用的链接=>
您如何在jQuery中处理oncut,oncopy和onpaste?
码
$(document).ready(function() {
var $editor = $('#editor');
var $clipboard = $('<textarea />').insertAfter($editor);
if(!document.execCommand('StyleWithCSS', false, false)) {
document.execCommand('UseCSS', false, true);
}
$editor.on('paste, keydown', function() {
var $self = $(this);
setTimeout(function(){
var $content = $self.html();
$clipboard.val($content);
},100);
});
});
undefined
为几天是吗:P
我最近需要完成与此类似的操作。我使用以下设计来访问粘贴元素和值。jsFiddle演示
$('body').on('paste', 'input, textarea', function (e)
{
setTimeout(function ()
{
//currentTarget added in jQuery 1.3
alert($(e.currentTarget).val());
//do stuff
},0);
});
另一种方法:该input
事件也将捕获该paste
事件。
$('textarea').bind('input', function () {
setTimeout(function () {
console.log('input event handled including paste event');
}, 0);
});
这可以在所有浏览器上获得粘贴的价值。并为所有文本框创建通用方法。
$("#textareaid").bind("paste", function(e){
var pastedData = e.target.value;
alert(pastedData);
} )
您可以将字段的原始值与字段的更改后的值进行比较,然后减去差异作为粘贴值。即使字段中存在现有的文本,这也可以正确捕获粘贴的文本。
function text_diff(first, second) {
var start = 0;
while (start < first.length && first[start] == second[start]) {
++start;
}
var end = 0;
while (first.length - end > start && first[first.length - end - 1] == second[second.length - end - 1]) {
++end;
}
end = second.length - end;
return second.substr(start, end - start);
}
$('textarea').bind('paste', function () {
var self = $(this);
var orig = self.val();
setTimeout(function () {
var pasted = text_diff(orig, $(self).val());
console.log(pasted);
});
});
似乎此事件具有clipboardData
附加的属性(它可能嵌套在该originalEvent
属性中)。在clipboardData
包含项目的数组和这些项目中的每一个都有一个getAsString()
功能,您可以调用。这将返回项目中内容的字符串表示形式。
这些项目也具有getAsFile()
功能,以及一些其他特定于浏览器的webkitGetAsEntry()
功能(例如,在Webkit浏览器中,具有功能)。
出于我的目的,我需要粘贴的字符串值。因此,我做了类似的事情:
$(element).bind("paste", function (e) {
e.originalEvent.clipboardData.items[0].getAsString(function (pStringRepresentation) {
debugger;
// pStringRepresentation now contains the string representation of what was pasted.
// This does not include HTML or any markup. Essentially jQuery's $(element).text()
// function result.
});
});
您将需要对项目进行迭代,并保留字符串连接结果。
有很多项目的事实使我认为分析每个项目需要做更多的工作。您还需要进行一些null / value检查。
var pastedData =
行给出错误:Uncaught TypeError: Cannot read property 'getData' of undefined
。您需要更改e.clipboardData
为e.originalEvent.clipboardData
。我怀疑是因为jquery在它自己的事件中包装了实际的粘贴事件-尽管不要在上面引用我。