我正在寻找一种方法来消毒输入,我粘贴到浏览器,这是可能的用jQuery做吗?

到目前为止,我已经想出了这个:

$(this).live(pasteEventName, function(e) {
 // this is where i would like to sanitize my input
 return false;
}

不幸的是,我的发展因为这个“小”问题而戛然而止。 如果有人能给我指出正确的方向,我真的会让我成为一个快乐的露营者。


当前回答

 $('').bind('input propertychange', function() {....});                      

这将为鼠标粘贴事件工作。

其他回答

这离你想要的越来越近了。

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() ) );
   }
 });
});

请注意,当clipboardData对象没有找到时(在IE以外的浏览器上),你目前得到的是元素的完整值+剪贴板的值。

你可以做一些额外的步骤来区分这两个值,在输入之前和输入之后,如果你真的只是在真正粘贴到元素的数据之后。

这段代码为我工作,要么从右击粘贴或直接复制粘贴

   $('.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();
      }
    });
$("#textboxid").on('input propertychange', function () {
    //perform operation
        });

它会工作得很好。

好吧,正好碰到了同样的问题。我绕了很长的路

$('input').on('paste', function () {
  var element = this;
  setTimeout(function () {
    var text = $(element).val();
    // do something with text
  }, 100);
});

只是一个小的超时,直到.val() func可以填充。

E.

document.addEventListener('paste', function(e){
    if(e.clipboardData.types.indexOf('text/html') > -1){
        processDataFromClipboard(e.clipboardData.getData('text/html'));
        e.preventDefault();

        ...
    }
});

进一步指出:

剪贴板API和事件