Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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>
like image 397
Abolfazl Panbehkar Avatar asked Aug 02 '20 06:08

Abolfazl Panbehkar


2 Answers

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 is used for IE support.

like image 147
Nick Parsons Avatar answered Oct 19 '22 21:10

Nick Parsons


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>
like image 23
Roberto Caboni Avatar answered Oct 19 '22 20:10

Roberto Caboni