【问题标题】:Paste event firing many times多次触发粘贴事件
【发布时间】:2013-09-11 12:25:50
【问题描述】:

这是我的 Chrome 处理粘贴事件的代码:

window.addEventListener("paste",processEvent);
function processEvent(e) {      
       console.log("paste event!");
}

此代码工作正常,除了事件被触发多次,即使我只按一次CTRL+V 命令。可能是什么原因?以及如何防止这种情况发生,因为每次按下粘贴命令时处理程序只触发一次非常重要。

更新:

我登录到控制台,这就是我的意思:

paste event!
clipboard from event
item found: 0 kind=file type=image/png
found image!
paste event!
clipboard from event
item found: 0 kind=file type=image/png
found image!
paste event!
clipboard from event
item found: 0 kind=file type=image/png
found image!

注意同一个事件是如何被触发 3 次的。

更新 2:

这段代码实际上是一个包裹在 JSNI 上的 GWT 代码:

public native void pasteEventHandler()/*-{
    window.addEventListener("paste",processEvent);
    function processEvent(e) {      
           console.log("paste event!");
    }
}-*/;

并在应用程序的@PostConstruct 期间调用:

@PostConstruct
public void setup() {
     pasteEventHandler();
}

当粘贴事件发生时,“页面”转换到另一个页面(从#Page1 到#Page2。当页面转换回#Page1 时,setup() 方法被启动。

【问题讨论】:

  • 当我说多次时,我的意思是有时两次或三 (3) 次
  • 你确定你只按一次而不按住粘贴快捷键(CTRL+V)吗?在这里我做了一个小提琴jsfiddle.net/XFPkt,当我点击结果窗口(右下方)并按 ctrl+v 时,我只会收到一条消息,除非我一直按住它。
  • 你的大括号标记似乎是错误的哥们
  • 也许你出于某种原因多次添加了事件监听器......
  • 在添加事件侦听器之前添加另一个控制台行。 console.log("adding event listener");window.addEventListener("paste",processEvent); 你看到控制台出现了 3 次吗?我的魔法球说是。

标签: javascript jquery gwt errai


【解决方案1】:

嗯,从你的代码中我看到了额外的}

window.addEventListener("paste",processEvent);
    function processEvent(e) {      
       console.log("paste event!");
    }
}  // what's that ?

也许} 属于for 或while(或其他)迭代。

【讨论】:

  • @KevinB 回答了这个问题
猜你喜欢
  • 2015-09-29
  • 1970-01-01
  • 2012-01-23
  • 2011-11-02
  • 2011-07-30
  • 1970-01-01
  • 2018-07-09
  • 1970-01-01
  • 2016-03-14
相关资源
最近更新 更多