我正在寻找一种方法来消毒输入,我粘贴到浏览器,这是可能的用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;
}
不幸的是,我的发展因为这个“小”问题而戛然而止。 如果有人能给我指出正确的方向,我真的会让我成为一个快乐的露营者。
当前回答
监听粘贴事件并设置一个keyup事件监听器。在keyup上,捕获值并删除keyup事件监听器。
$('.inputTextArea').bind('paste', function (e){
$(e.target).keyup(getInput);
});
function getInput(e){
var inputText = $(e.target).val();
$(e.target).unbind('keyup');
}
其他回答
请看这个例子:http://www.p2e.dk/diverse/detectPaste.htm
它本质上用oninput事件跟踪每个更改,然后通过字符串比较检查它是否是粘贴。哦,在IE中有一个onpaste事件。所以:
$ (something).bind ("input paste", function (e) {
// check for paste as in example above and
// do something
})
这段代码为我工作,要么从右击粘贴或直接复制粘贴
$('.textbox').on('paste input propertychange', function (e) {
$(this).val( $(this).val().replace(/[^0-9.]/g, '') );
})
当我粘贴第1节:劳动力成本时,它在文本框中变成1。
为了只允许浮动值,我使用这段代码
//only decimal
$('.textbox').keypress(function(e) {
if(e.which == 46 && $(this).val().indexOf('.') != -1) {
e.preventDefault();
}
if (e.which == 8 || e.which == 46) {
return true;
} else if ( e.which < 48 || e.which > 57) {
e.preventDefault();
}
});
嗯…我认为你可以使用e.clipboardData来捕捉被粘贴的数据。如果不成功,看看这里。
$(this).live("paste", function(e) {
alert(e.clipboardData); // [object Clipboard]
});
为了跨平台兼容性,它应该处理oninput和onpropertychange事件:
$ (something).bind ("input propertychange", function (e) {
// check for paste as in example above and
// do something
})
事实证明,这是相当虚幻的。在粘贴事件函数内的代码执行之前,输入的值不会更新。我尝试从粘贴事件函数中调用其他事件,但输入值仍然没有与任何事件函数内的粘贴文本一起更新。这是除了keyup之外的所有事件。如果从粘贴事件函数中调用keyup,则可以从keyup事件函数中清除粘贴的文本。像这样…
$(':input').live
(
'input paste',
function(e)
{
$(this).keyup();
}
);
$(':input').live
(
'keyup',
function(e)
{
// sanitize pasted text here
}
);
这里有一个警告。在Firefox中,如果您重置每个键上的输入文本,如果文本长于输入宽度允许的可视区域,则重置每个键上的值将破坏浏览器自动将文本滚动到文本末尾的插入号位置的功能。相反,文本将滚动回开始,而插入符号则不在视图中。