使用javascript(Jquery)。
在网上搜索,似乎不可能。到目前为止,我有类似的东西:
$("#textAreaId").bind('paste', function (e) {
alert('pasting text!!!!');
var data = $("#taData").val();
alert(data);
});
但是在这个阶段数据是空的...有没有办法在粘贴之后捕获粘贴的输入?好像应该有办法。
发生粘贴时,不会触发Jquery中的键盘事件。
有什么想法吗?
答案 0 :(得分:4)
这是我决定做的事情。请注意,我只需要抓取粘贴的内容。
$(document).ready(function () {
$("#taData").bind('paste', function (e) {
setTimeout(function () { DisplayPastedData(); }, 100);
});
});
function DisplayPastedData() {
var data = $("#taData").val();
alert('input pasted ' + data);
}
我已经随意选择了100毫秒等待,这与我粘贴的最大数据非常吻合。
答案 1 :(得分:2)
并非所有浏览器都支持相同的复制/粘贴功能。以下是哪个浏览器支持功能的图表:
http://www.quirksmode.org/dom/events/cutcopypaste.html
如果浏览器支持捕获复制/粘贴事件,jQuery应该可以正常工作。我建议您测试每个目标浏览器。
另一种方法是使用jQuery'data'属性来检测输入字段是否已更改。这是一篇带有示例代码的文章:
http://www.mydogboris.com/2009/10/using-jquery-data-feature-to-detect-form-changes/
来自文章:
var formChanged = false;
$(document).ready(function() {
$('#my_form input[type=text].editable, #my_form textarea.editable').each(function (i) {
$(this).data('initial_value', $(this).val());
});
$('#my_form input[type=text].editable, #my_form textarea.editable').keyup(function() {
if ($(this).val() != $(this).data('initial_value')) {
handleFormChanged();
}
});
$('#my_form .editable').bind('change paste', function() {
handleFormChanged();
});
$('.navigation_link').bind("click", function () {
return confirmNavigation();
});
});
function handleFormChanged() {
$('#save_or_update').attr("disabled", false);
formChanged = true;
}
function confirmNavigation() {
if (formChanged) {
return confirm('Are you sure? Your changes will be lost!');
} else {
return true;
}
}
答案 2 :(得分:0)
相当旧的线程,但您现在可能会使用FilteredPaste.js(http://willemmulder.github.com/FilteredPaste.js/)。它可以让你控制哪些内容被粘贴到textarea或contenteditable,你将能够随意过滤/更改/提取内容。