简体   繁体   中英

How to get all of the pasted string, in input which has a maxLength attribute?

I need to get all of the pasted string in input which has a maxLength attribute.

But in 'onpaste' event there is no property to get all of the pasted string.

For example, check below snippet with this string:

"AAAAA-BBBBB-BBBBB-BBBBB-BBBBB"

The output is: "AAAAA"

But I need all of the string.

 const onPasteFn = (e) => { setTimeout(() => document.getElementById("demo").innerHTML = e.target.value, 0) }
 <input type="text" maxLength="5" onpaste="onPasteFn(event)" /> <p id="demo"></p>

Consider using clipboardData from the event, where you can use getData() to grab the text that was pasted from the clipboard like so:

 const onPasteFn = (e) => { document.getElementById("demo").textContent = (e.clipboardData || window.clipboardData).getData('text'); }
 <input type="text" maxLength="5" onpaste="onPasteFn(event)" /> <p id="demo"></p>

See example here from the docs. Note that the fallback of || window.clipboardData|| window.clipboardData is used for IE support.

You can access clipboardData through function getData() , and print it instead of e.target.value() . If you store it in a temporary variable, like I did in my example, you are able to perform further elaboration on the pasted string.

It works for reasonably recent versions of browsers (for example FF 22+ ).

 const onPasteFn = (e) => { var myData = e.clipboardData.getData("text/plain"); setTimeout(() => document.getElementById("demo").innerHTML = myData, 0) }
 <input type="text" maxLength="5" onpaste="onPasteFn(event)" /> <p id="demo"></p>

Set a higher maxLength if the pasted string is expected to be larger. Your sample input string has length 29. So here is modified code with maxLength=30 .

 const onPasteFn = (e) => { setTimeout(() => document.getElementById("demo").innerHTML = e.target.value, 0) }
 <input type="text" maxLength="30" onpaste="onPasteFn(event)" /> <p id="demo"></p>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM