[
https://issues.apache.org/jira/browse/WICKET-1332?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12570459#action_12570459
]
Carlos Pita commented on WICKET-1332:
-------------------------------------
Here is a shorter, safer and faster version that uses getElementsByTagName
instead of a recursive descent. It also checks for the type of input fields in
order to attach handlers just to radios and checkboxes.
asb.append("function attachChoiceHandlers(markupId, callbackScript)
{\n");
asb.append(" var inputNodes =
wicketGet(markupId).getElementsByTagName('input');\n");
asb.append(" for (var i = 0 ; i < inputNodes.length ; i ++) {\n");
asb.append(" var inputNode = inputNodes[i];\n");
asb.append(" if (!inputNode.type) continue;\n");
asb.append(" var inputType = inputNode.type.toLowerCase();\n");
asb.append(" if (inputType == 'check' || inputType == 'radio') {\n");
asb.append(" Wicket.Event.add(inputNode, 'click',
callbackScript);\n");
asb.append(" }\n");
asb.append(" }\n");
asb.append("}\n");
> AjaxFormChoiceComponentUpdatingBehavior just updates the group "grandchildren"
> ------------------------------------------------------------------------------
>
> Key: WICKET-1332
> URL: https://issues.apache.org/jira/browse/WICKET-1332
> Project: Wicket
> Issue Type: Bug
> Components: wicket
> Affects Versions: 1.3.1
> Reporter: Carlos Pita
> Assignee: Matej Knopp
>
> Up to 1.3.0, there was a bug in that AjaxFormChoiceComponentUpdatingBehavior
> updated just the group's direct children. Now it generates the header script
> quoted below, that iterates over the direct children and then over the
> children of these, triggering the event for the input grandchildren only. So
> the situation is even worse. I think that attachChoiceHandlers should descend
> recursively and search for input elements along all the group descendants,
> not just one arbitrarily chosen level.
> function attachChoiceHandlers(markupid, callbackscript) {
> var choiceElementGroup = document.getElementById(markupid);
> for( var x = 0; x < choiceElementGroup.childNodes.length; x++ ) {
> var choiceElementList = choiceElementGroup.childNodes[x]; for( var y =
> 0; y < choiceElementList.childNodes.length; y++ ) {
> if (choiceElementList.childNodes[y] &&
> choiceElementList.childNodes[y].tagName) {
> var tag = choiceElementList.childNodes[y].tagName.toLowerCase();
> if (tag == 'input') {
> Wicket.Event.add(choiceElementList.childNodes[y],'click',
> callbackscript); }
> }
> }
> }
> }
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.