拦截Javascript中的粘贴事件
有没有办法拦截 JavaScript 中的粘贴事件并获取原始值,更改它,并将关联的 DOM 元素的值设置为修改后的值?
例如,我有一个用户尝试复制并粘贴一个包含空格的字符串,并且该字符串的长度超过了文本框的最大长度。我想截取文本,删除空格,然后用更改值设置文本框的值。
这可能吗?
Is there a way to intercept the paste event in JavaScript and get the raw value, change it, and set the associated DOM element's value to be the modified value?
For instance, I have a user trying to copy and paste a string with spaces in it and the string's length exceeds the max length of my text box. I want to intercept the text, remove the spaces, and then set the text box's value with the change value.
Is this possible?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以通过附加“onpaste”处理程序来拦截粘贴事件,并通过在 IE 中使用“
window.clipboardData.getData('Text')
”或“event.clipboardData.getData('Text')”获取粘贴的文本。 getData('text/plain')
" 在其他浏览器中。例如:
正如 @pimvdb 所指出的,如果使用 jQuery,则需要使用“
e.originalEvent.clipboardData
”。You can intercept the paste event by attaching an "onpaste" handler and get the pasted text by using "
window.clipboardData.getData('Text')
" in IE or "event.clipboardData.getData('text/plain')
" in other browsers.For example:
As @pimvdb notes, you will need to use "
e.originalEvent.clipboardData
" if using jQuery.碰巧,我回答了类似的问题 今天早些时候。简而言之,您需要一种技巧,以便在粘贴事件触发时将插入符号重定向到屏幕外的文本区域。
As it happens, I answered a similar question earlier today. In short, you need a hack to redirect the caret to an off-screen textarea when the paste event fires.
我需要对粘贴的内容进行“修剪”(删除所有前导和尾随空格),同时仍然允许使用空格键。
对于 Ctrl+V、Shift+Insert 和鼠标右键粘贴,我发现自 2017 年 4 月 22 日起在 FF、IE11 和 Chrome 中有效的方法如下:
两个注意事项:
如果粘贴时已经有文本,修剪发生在整个结果上,而不仅仅是粘贴的内容。
如果用户键入空格或 BS 或 Del,然后粘贴,则不会进行修剪。
I needed to implement a "trim" on whatever was pasted (remove all leading and trailing whitespace) while still allowing the use of the spacebar.
For Ctrl+V, Shift+Insert and mouse right-click Paste, here is what I found worked in FF, IE11 and Chrome as of 2017-04-22:
Two caveats:
If there is already text when the paste occurs, trimming occurs on the entire result, not just what it being pasted.
If the user types space or BS or Del and then pastes, trimming will not occur.