我有一个 <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/