ExtJs:当文本字段获得焦点时,在文本字段中手动触发粘贴事件

Posted

技术标签:

【中文标题】ExtJs:当文本字段获得焦点时,在文本字段中手动触发粘贴事件【英文标题】:ExtJs: Manually fire paste event in textfield when that textfield is focused 【发布时间】:2014-11-24 13:33:22 【问题描述】:

我有一个文本字段,它应该包含剪贴板数据,并且应该在单击或聚焦该文本字段时执行粘贴操作,而不是按 Ctrl+V 键。

已编辑

我已成功触发粘贴事件,但剪贴板数据为空。

  fld.getEl().on('paste', me.pasteFromClipboard,fld);
  fld.getEl().on('click', function(evt,target)
            var ev=document.createEvent("KeyboardEvent");
            ev.initKeyboardEvent('paste',true,true,window,true,false,false,false,86,86);
            this.getEl().dom.dispatchEvent(ev);
        ,fld);

pasteFromClipboard 是:

  pasteFromClipboard : function(evt,target)
      var pastedText = "";
      if (Ext.isIE) 
         pastedText = window.clipboardData.getData('Text');
      
      else if (Ext.isGecko) 
         pastedText = "";
      
      else if (Ext.isOpera) 
         pastedText = evt.browserEvent.clipboardData.getData('text/plain');
      
      else if (Ext.isWebKit) 
        //WebKit based browsers. i.e: Chrome, Safari
         pastedText = evt.browserEvent.clipboardData.getData('text/plain');
      
    evt.stopEvent();
    if(pastedText.indexOf('#') == 0)
        pastedText = pastedText.substr(1,pastedText.length);
        this.setValue(pastedText);  
    
 

我怎样才能做到这一点?

提前致谢。

【问题讨论】:

【参考方案1】:

看起来触发事件的对象与监听事件的对象不同。

fld.on('paste', me.pasteFromClipboard,fld);
fld.on('click', function(evt,target)
    fld.fireEvent('paste'); // Trigger Paste Event.
,fld);

现在,触发和监听都与fld 相关联

【讨论】:

以上是关于ExtJs:当文本字段获得焦点时,在文本字段中手动触发粘贴事件的主要内容,如果未能解决你的问题,请参考以下文章

当文本字段获得焦点时,如何使底部工具栏浮在软键盘上方

ExtJS 5 文本字段错误 (Chrome)

当文本字段或文本区域使用纯 JavaScript 获得焦点时禁用键盘快捷键

当焦点和键盘隐藏文本字段时滚动到文本字段

如何在颤动中取消焦点文本字段

ExtJs - 具有动态可关闭标签的文本字段