JavaScript:粘贴事件

3
我需要更改粘贴事件的标准行为。我想延迟执行几毫秒的粘贴事件。有没有纯JavaScript或jQuery的方法可以实现这一点?
编辑:更明确地说,当发生粘贴事件时,我需要执行一个动作,等待几毫秒然后进行粘贴。

1
我想,如果你能检测到它,你就可以延迟它 :? http://www.mkyong.com/jquery/how-to-detect-copy-paste-and-cut-behavior-with-jquery/ - ajt
你想延迟粘贴的文本显示,还是在JavaScript触发事件时? - alex
我想在触发粘贴事件后延迟几毫秒显示已粘贴的文本,因为您无法手动触发粘贴事件。 - elnabo
3个回答

0

您可以向接收粘贴事件的元素添加一个onpaste事件处理程序。

在处理程序中,您应该:

  1. 添加延迟(有多种方法可以实现)
  2. 返回true,以便默认处理程序继续进行粘贴操作。

例如:

var myElement = document.getElementById('pasteElement');

myElement.onpaste = function(e) {  //Add handler to onpaste event

  doSomethingHere();  //Do something before the delay

  sleep(200);  //Add the delay
  return true; //return true continue with default paste event
}

//One way to introduce a delay
function sleep(milliseconds) {
  var start = new Date().getTime();
  for (var i = 0; i < 1e7; i++) {
    if ((new Date().getTime() - start) > milliseconds){
      break;
    }
  }
}

编辑:添加了一行以显示在等待之前执行操作的位置。


啊..不要这样写一个睡眠函数...它会冻结浏览器两秒钟,可能会导致错误。 - Andreas Louv
那样做不起作用,因为执行被冻结了,就像我没有等待一样。 - elnabo

0
改变颜色怎么样?文字保持白色500毫秒。
$('input').each(function(){

   $(this).bind('paste', function(e){ 
   $(this).css('color', '#fff');
   setTimeout(function(){
  e.target.style.color="#000";
   },500)});
});

这将使所有的文本都变得不可见,而不仅仅是粘贴的部分。另外,我需要的是真正的延迟。执行一个动作,然后等待几毫秒再粘贴。 - elnabo
我也很好奇为什么setTimeout函数不会让我们等待文本显示。 - vusan

0

Sctt 的回答基础上(但不使用可怕的 sleep() 函数),请尝试以下操作:

var delayTime = 5000; // 5 seconds

$('#myObject').bind('paste', function() {
  // Code here is executed before the delay

  setTimeout(function() {
    // Code here is executed during the delay
  }, delayTime);

  return true;
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接