我正在寻找一种方法来对我在浏览器中粘贴的输入进行消毒处理,使用jQuery能实现吗?
到目前为止,我已经想出了以下内容:
$(this).live(pasteEventName, function(e) {
// this is where i would like to sanitize my input
return false;
}
很不幸,我的开发因为这个“小”问题而陷入了僵局。如果有人能指点我正确的方向,我会非常高兴。
我正在寻找一种方法来对我在浏览器中粘贴的输入进行消毒处理,使用jQuery能实现吗?
到目前为止,我已经想出了以下内容:
$(this).live(pasteEventName, function(e) {
// this is where i would like to sanitize my input
return false;
}
很不幸,我的开发因为这个“小”问题而陷入了僵局。如果有人能指点我正确的方向,我会非常高兴。
好的,我也遇到了同样的问题...我绕了一个大弯
$('input').on('paste', function () {
var element = this;
setTimeout(function () {
var text = $(element).val();
// do something with text
}, 100);
});
只需要一个小的超时等待,直到.val()函数能够被填充。
E.
您实际上可以直接从事件中获取该值。不过如何获取它有点晦涩。
如果您不想让它传递,请返回false。
$(this).on('paste', function(e) {
var pasteData = e.originalEvent.clipboardData.getData('text')
});
e.clipboardData.getData('text')
。 - Asier Paz为了跨平台兼容性,它应该处理oninput和onpropertychange事件:
$ (something).bind ("input propertychange", function (e) {
// check for paste as in example above and
// do something
})
我用以下代码解决了问题:
$("#editor").live('input paste',function(e){
if(e.target.id == 'editor') {
$('<textarea></textarea>').attr('id', 'paste').appendTo('#editMode');
$("#paste").focus();
setTimeout($(this).paste, 250);
}
});
现在我只需要存储插入符位置,然后在该位置追加文本即可,这样我就完成了……我想是这样的 :)
keyup keydown paste input
,但显然这取决于你的动机是什么。 - Pierre嗯...我认为你可以使用e.clipboardData
来获取粘贴的数据。如果不行,可以在这里查看。
$(this).live("paste", function(e) {
alert(e.clipboardData); // [object Clipboard]
});
监听粘贴事件并设置一个键盘弹起事件的监听器。在键盘弹起时,捕获值并移除键盘弹起事件监听器。
$('.inputTextArea').bind('paste', function (e){
$(e.target).keyup(getInput);
});
function getInput(e){
var inputText = $(e.target).val();
$(e.target).unbind('keyup');
}
$("#textboxid").on('input propertychange', function () {
//perform operation
});
它将正常工作。
这已经更接近你想要的了。
function sanitize(s) {
return s.replace(/\bfoo\b/g, "~");
};
$(function() {
$(":text, textarea").bind("input paste", function(e) {
try {
clipboardData.setData("text",
sanitize(clipboardData.getData("text"))
);
} catch (e) {
$(this).val( sanitize( $(this).val() ) );
}
});
});
$('').bind('input propertychange', function() {....});
这将适用于鼠标粘贴事件。
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);
});
});