Details
-
Type: Bug
-
Status: Closed
-
Priority: Major
-
Resolution: Won't Fix
-
Affects Version/s: 1.8.2
-
Fix Version/s: 1.8.2-EE-GA_P01, 1.8.3
-
Component/s: ICE-Components
-
Labels:None
-
Environment:Icefaces rev.20220
-
Workaround Exists:Yes
Description
If user define maxlength then script Ice.txtAreaMaxLen is fired on some events, like below:
<TEXTAREA onmousedown="this.focus();" onkeydown="Ice.txtAreaMaxLen(this,140);" onblur="iceSubmitPartial(form, this, event);" onchange="Ice.txtAreaMaxLen(this,140);" (...)></TEXTAREA>
But the same script cannot be fired onkeydown and onchange. Event onkeydown should return false if new char exceeds range
This patch should helps
<TEXTAREA onmousedown="this.focus();" onkeydown="return Ice.txtAreaMaxLen(this,140);" onblur="iceSubmitPartial(form, this, event);" onchange="Ice.txtAreaMaxLen(this,140);" (...)></TEXTAREA>
Ice.txtAreaMaxLen = function(field, maxlength) {
if (maxlength >= 0) {
if(field.value.length == maxlength)
return false;
if(field.value.length > maxlength)
field.value = field.value.substring(0, maxlength);
}
return true;
}
<TEXTAREA onmousedown="this.focus();" onkeydown="Ice.txtAreaMaxLen(this,140);" onblur="iceSubmitPartial(form, this, event);" onchange="Ice.txtAreaMaxLen(this,140);" (...)></TEXTAREA>
But the same script cannot be fired onkeydown and onchange. Event onkeydown should return false if new char exceeds range
This patch should helps
<TEXTAREA onmousedown="this.focus();" onkeydown="return Ice.txtAreaMaxLen(this,140);" onblur="iceSubmitPartial(form, this, event);" onchange="Ice.txtAreaMaxLen(this,140);" (...)></TEXTAREA>
Ice.txtAreaMaxLen = function(field, maxlength) {
if (maxlength >= 0) {
if(field.value.length == maxlength)
return false;
if(field.value.length > maxlength)
field.value = field.value.substring(0, maxlength);
}
return true;
}
Issue Links
- depends on
-
ICE-3458 Add maxlength attribute to inputTextarea
- Closed
In attached file patch for Icefaces rev.20636
Changes
\bridge\lib\extras\extras.js
309c309,312
< if (maxlength >= 0 && field.value.length > maxlength) {
—
> if (maxlength >= 0){
> if (field.value.length == maxlength)
> return false;
> if (field.value.length > maxlength)
311a315
> return true;
\component\src\com\icesoft\faces\component\ext\renderkit\TextareaRenderer.java
78c78
< rendererJS.put(HTML.ONKEYDOWN_ATTR, handler);
—
> rendererJS.put(HTML.ONKEYDOWN_ATTR, " return "+handler);
Test case
component-showcase > textfields.jspx > add maxlength="20" to ice:inputTextarea
Without patch user can typ 21 chars and last char is truncated only after submit.