473,387 Members | 1,530 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,387 software developers and data experts.

Limit textarea length

I have a textarea that must be limited to 70 characters. No big deal --
at least so I thought.
* Textarea must not exceed 70 characters
* Exceeding content must be cut off
* Must work on input by keyboard (keypress, keyup events)
* Must work on pasted input from context menu
* Must work on pasted input via CTRL+V and similar
* Must work on pasted input via browsers menu>Edit>Paste
* Must work in Mozilla + IE and coded via W3C standards

I found quite some discussions here in comp.lang.javascript on this
subject, but all lack the discussion of non-keyboard inputs.

So far, I concluded to avoid using the onkeyup or onkeypress events -
they do not capture when data pasted via the mouse.

This is what I do now, but there are still problems.
* Textarea onfocus() adds a window.setInterval eventlistener to check
the textarea value 10 times per second.
* If textarea.value exceeds 70 characters, set textarea.value to
substring(0,69)
* Textarea onblur() removes eventlistener via window.clearInterval

This works when I paste text in all ways and when I enter data by
keyboard from one end to the other. BUT as soon as I add text at the
beginning of the textarea, then the end text is cut off and cursor is
moved to the end of textarea.

My idea would work OK if I could figure out a way to move cursor back
to its position when I finish cropping textarea text. As you might see,
I'm a bit stuck here.
Any suggestions appreciated,

Thanks in advance,

Jesper

Jul 23 '05 #1
5 12104
"Jesper Rønn-Jensen" <je******@gmail.com> wrote in message
news:11**********************@c13g2000cwb.googlegr oups.com...
I have a textarea that must be limited to 70 characters. No big deal --
at least so I thought.


[snip]

Why not just use a "text" field?

<input type="text" name="data" size="70" maxlength="70">

You can also set "size=" to somerthing else if it doesn't fit on your page.


Jul 23 '05 #2
Thanks for your quick reply.
Why not just use a "text" field?


Text field is a no-go because I cannot input line breaks. Sorry, that
would have been easy. I must use a textarea.

Jul 23 '05 #3
Jesper Rønn-Jensen wrote:
Thanks for your quick reply.
Why not just use a "text" field?

Text field is a no-go because I cannot input line breaks. Sorry, that
would have been easy. I must use a textarea.


Most people would not include line breaks in their character
count (if they actually try to count the characters at all).

Why not have your event listener write the current number of
characters to a place in the page next to the text area. When
it exceeds 70 characters, make it red and bold. If the user
submits the form with too many characters, give them an error
message and send them back to fix it.

Attempting to automate character removal will likely just bind
you in ever more complex "what if..." scenarios. And randomly
removing characters from the end of the supplied text to make it
only 70 characters will likely frustrate users - what if the bit
you programmatically trimmed was something they wanted kept, and
some other part trimmed?

The only way they'll know they've hit the magic number is if
they notice characters disappearing from the end of the text.

It's like when you type an incorrect URL into the browser
address bar. Having advised you of the error, the browser
should leave the incorrect text there and let you fix it,
rather than display the URL of the error page (as some browsers
still do).

Users aren't dumb. Give them appropriate information and a
helpful (not interventionist) interface and they'll respond much
better.

--
Rob
Jul 23 '05 #4
Jesper Rønn-Jensen <je******@gmail.com> wrote in message
news:11**********************@c13g2000cwb.googlegr oups.com...
I have a textarea that must be limited to 70 characters. No big deal --
at least so I thought.
* Textarea must not exceed 70 characters
* Exceeding content must be cut off
* Must work on input by keyboard (keypress, keyup events)
* Must work on pasted input from context menu
* Must work on pasted input via CTRL+V and similar
* Must work on pasted input via browsers menu>Edit>Paste
* Must work in Mozilla + IE and coded via W3C standards

I found quite some discussions here in comp.lang.javascript on this
subject, but all lack the discussion of non-keyboard inputs.

So far, I concluded to avoid using the onkeyup or onkeypress events -
they do not capture when data pasted via the mouse.

This is what I do now, but there are still problems.
* Textarea onfocus() adds a window.setInterval eventlistener to check
the textarea value 10 times per second.
* If textarea.value exceeds 70 characters, set textarea.value to
substring(0,69)
* Textarea onblur() removes eventlistener via window.clearInterval

This works when I paste text in all ways and when I enter data by
keyboard from one end to the other. BUT as soon as I add text at the
beginning of the textarea, then the end text is cut off and cursor is
moved to the end of textarea.

My idea would work OK if I could figure out a way to move cursor back
to its position when I finish cropping textarea text. As you might see,
I'm a bit stuck here.
Any suggestions appreciated,

Thanks in advance,

Jesper
Keyboard events are no problem, but I know of no event-driven way of
limiting pasted text other than with onchange, which doesn't fire until the
textarea loses focus. Of course you can use setInterval() to monitor the
length of the text periodically and limit it if necessary. Aside from
user-friendliness issues already mentioned, you could see if this meets your
needs:

<html>
<body>
<BR>My dear Watson," said he, "I cannot agree with those who rank modesty
among the virtues. To the logician all things must be seen exactly as they
are, and to underestimate oneself is as much a departure from truth as to
exaggerate one's own powers."
<BR><BR><B>Paste text above into text area below.</B><BR><BR>
<script>
function chopText(elem, limit)
{
if(elem.value.length>limit)
elem.value=elem.value.substring(0,limit);

document.f1.cLeft.value=limit-elem.value.length
}

setInterval("chopText(document.f1.ta1,70)",1000);

</script>

<form name="f1">
<BR>
<textarea name='ta1' rows=5 cols=40 onchange=onkeyup="chopText(this,70)"</TEXTAREA>

<BR>Characters Remaining
<input size=3 type="text" name="cLeft">
</form>
</body>
</html>

--
S.C.
http://makeashorterlink.com/?H3E82245A

Jul 23 '05 #5
Stephen Chalmers wrote:
[...]
Keyboard events are no problem, but I know of no event-driven way of
limiting pasted text other than with onchange, which doesn't fire until the
textarea loses focus. Of course you can use setInterval() to monitor the
length of the text periodically and limit it if necessary. Aside from
user-friendliness issues already mentioned, you could see if this meets your
needs:
A good start, so here's an similar version that implements a
less interventionist approach (i.e. it warns, not does). I
shortened the interval too - 1 second was a tad long for me.
<html><head><title>Character play</title></head>
<body>
<BR>"If you are going through hell, the best thing to do
is to keep going" - Winston Churchill
<BR><BR><B>Paste text above into text area below.</B><BR><BR>
<script type="text/javascript">
function checkText(elem, limit) {
var charRemaining = limit - elem.value.length;

if (document.getElementById) {
var aText = document.getElementById('alertText');
var aNumber = document.getElementById('alertNumber');
} else if (document.all) {
var aText = document.all['alertText'];
var aNumber = document.all['alertNumber'];
}

if (aText && aNumber) {
if (charRemaining < 0) {
aText.innerHTML = '<b>Too many characters, remove:&nbsp;';
aNumber.innerHTML = '<b>' + Math.abs(charRemaining)
+ '</b>';
} else {
aText.innerHTML = 'Characters remaining:&nbsp;'
aNumber.innerHTML = charRemaining;
}
}
}

setInterval("checkText(document.f1.ta1,70)",500);

</script>

<form name="f1" action="">
<BR>
<textarea name='ta1' rows="5" cols="40"
onchange=onkeyup="checkText(this,70)"</TEXTAREA>


<BR><span id="alertText">Characters Remaining:</span>
<span id="alertNumber" style="
border: 1px solid red;
padding: 4 4 4 4;">70</span>
</form>
</body>
</html>
--
Rob
Jul 23 '05 #6

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

6
by: Jay | last post by:
I have an HTML form with a textarea. When passing large amount of data in the textarea, the Processing asp pages catch an error message as follows: Error Type: (0x80020009) Exception occurred. ...
4
by: wing | last post by:
Hi all, I find a JavaScript that limits the field length in a textarea, but it is not completed. The script does not handle the copy and paste case. For example, says the textarea field...
1
by: Volt | last post by:
is there any way to select and mark part of text in textarea by regular expression? i need to select the first string in textarea whitch is like xxxxx,xxx where x is any character
10
by: M K | last post by:
Is there a way to limit an asp:textarea to 100 chars on the client side? The db only accepts 100 and chops the rest off.
5
by: JohnSouth | last post by:
Hi In a TextBox I can set a maximum size for the entry. Is there a way of limiting the number of characters being entered into a TextArea control? John South www.wherecanwego.com
6
by: @sh | last post by:
Guys, Working on a function to alert the user to too many characters being entered into a text area, I've put together this function so far borrowing bits from resource websites... function...
7
Haitashi
by: Haitashi | last post by:
This is in the head: <script language="javascript" type="text/javascript"> function limitText(limitField, limitCount, limitNum) { if (limitField.value.length > limitNum) { limitField.value =...
3
by: teser3 | last post by:
I have the below that limits the textarea input to 500 characters but cant get the alert message to work. It doesnt show anything. Please advise. <script language="javascript"...
7
by: =?ISO-8859-1?Q?=22=C1lvaro_G=2E_Vicario=22?= | last post by:
I need to emulate the missing "maxlegth" attribute in "textarea" fields but all my Google searches either lead to obsolete scripts that overwrite the "value" property (thus losing caret position)...
0
by: aa123db | last post by:
Variable and constants Use var or let for variables and const fror constants. Var foo ='bar'; Let foo ='bar';const baz ='bar'; Functions function $name$ ($parameters$) { } ...
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.