javascript - 图像数据的文本区域未触发 onpaste 事件

标签 javascript internet-explorer internet-explorer-11 copy-paste

我有一个 <textarea> 的工作页面用 <input type="file"> 描述上传。我添加了截图 onpaste支持textarea它适用于 Firefox 52,应该适用于 Chrome。

但是,在 IE 中 onpaste不会触发 <textarea>专注于非文本数据。

HTML 测试页(IE 只为简洁起见):

<!DOCTYPE html><html><head><meta charset="UTF-8"/></head><body><form>
<script type="text/ecmascript">
function tb_pasted(e) {
   document.getElementById('txtTest').value += ' evtfired ';
   var s = "data: " + clipboardData.getData("Text") + "\n";
   var numFinished = 0; var numStarted = 0;
   for( var i=0; i<clipboardData.files.length; ++i ) {
      ++numStarted;
      var file = clipboardData.files[i];
      var fileReader = new FileReader();
      fileReader.onload = function () {
          var base64Data = fileReader.result
          s += " s:" + file.size + " d:" + fileReader.result.substring(10, 30) + "\n";
          ++numFinished;
      }
      fileReader.readAsDataURL(file);
   }
   function alertWhenDone() { 
      if( numFinished >= numStarted ) alert(s);
      else setTimeout(alertWhenDone, 100);
   }
   alertWhenDone();
   return false;
}
</script>
nofire on image: <br/><textarea id="txtTest" onpaste="return tb_pasted(event);"></textarea>
<br/><br/>always fires: <br/><div id="divTest" contenteditable="true"
     style="background-color:yellow; width:100px; height:100px;"
     onpaste="return tb_pasted(event);"></div>
</form></body></html>

有什么方法可以得到 onpaste无论内容类型如何,都为“纯文本”字段触发无论如何,还是我必须根除所有<textarea>和该页面的文本字段?我读过有关使用 <div/> 的信息作为文本输入,这可能有效,但我希望有更好的方法。

编辑: 我尝试返回 false来自 onbeforepaste这似乎根本没有帮助。下面不会在 IE 中为非文本触发 onpaste 事件:

Enter some text: 
<textarea id="txtTest"
          onbeforepaste="alert('before paste'); return false;"
          onpaste="alert('pasting'); return true;"
          ></textarea>

最佳答案

啊哈!!! onbeforepaste事件就是为这个问题而建立的。

您可能认为这就像返回 false 一样简单来自 onbeforepaste对于 <textarea>但这似乎并没有使 onpaste事件火灾。

但是,如果您结合 return false.focus()在非文本元素上(如 <div> ):

 nofire on image: <br/>
 <textarea id="txtTest" 
     onpaste="return tb_pasted(event);"
                                                fix="*** \/ ***"
     onbeforepaste="document.getElementById('divTest').focus();  return false;"
                                                fix="*** /\ ***"
     ></textarea><br/><br/>
 always fires: <br/>
 <div id="divTest" contenteditable="true"
     style="background-color:yellow; width:100px; height:100px;"
     onpaste="return tb_pasted(event);"></div>

然后 in 似乎在 IE 中也能正常工作。

关于javascript - 图像数据的文本区域未触发 onpaste 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43102948/

相关文章:

javascript - 双击禁用单选按钮正在启动 IE11 中的单击事件

javascript - Meteor Resource 解释为样式表但使用 MIME 类型 text/html 传输

javascript - 如何通过在 JavaScript 对象的多个键/值对中找到最小值来选择键/值对?

javascript - jQuery 数据表条件设置

html - "&percnt;"IE无法识别

javascript - 当我在 IE Mobile 中使用计时器时,出现[对象错误]

javascript - 在 Internet Explorer 11 中支持 ES6

javascript - slider 不自动移动

html - 图像在 IE 9 中不显示

javascript - IE8适配IE11