Updated Branches: refs/heads/master 4cf0aac89 -> c7448aee3
WICKET-4769 Clicking on Label of Radio doesn't update component with Ajax update Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/c7448aee Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/c7448aee Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/c7448aee Branch: refs/heads/master Commit: c7448aee3eabdf6b3d39714ec66a72b445c52370 Parents: 8ebefae Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Thu Sep 27 15:44:10 2012 +0300 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Thu Sep 27 15:44:10 2012 +0300 ---------------------------------------------------------------------- .../AjaxFormChoiceComponentUpdatingBehavior.java | 39 ++++++++++---- 1 files changed, 28 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/c7448aee/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormChoiceComponentUpdatingBehavior.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormChoiceComponentUpdatingBehavior.java b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormChoiceComponentUpdatingBehavior.java index 3b9b52b..0a66b71 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormChoiceComponentUpdatingBehavior.java +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/form/AjaxFormChoiceComponentUpdatingBehavior.java @@ -61,23 +61,40 @@ public abstract class AjaxFormChoiceComponentUpdatingBehavior extends AbstractDe // extracts the currently selected checkboxes/radios on every click AppendingStringBuffer asb = new AppendingStringBuffer(); asb.append("function attachChoiceHandlers(markupId, attrs) {\n"); - asb.append(" function getInputValues(groupId) {\n"); - asb.append(" var result = [];\n"); - asb.append(" var inputNodes = Wicket.$(groupId).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.checked) continue;\n"); - asb.append(" if (!inputNode.type) continue;\n"); - asb.append(" if (!(inputNode.className.indexOf('wicket-'+markupId)>=0)&&!(inputNode.id.indexOf(markupId+'-')>=0)) continue;\n"); + asb.append(" function getInputValues(groupId, attributes) {\n"); + asb.append(" var result = [], srcElement = attributes.event.target;\n"); + + asb.append(" if (srcElement) {\n"); + asb.append(" if (srcElement.tagName.toLowerCase() === 'input') {\n"); + asb.append(" var inputNode = srcElement;\n"); + asb.append(" if (!inputNode.checked) return;\n"); + asb.append(" if (!inputNode.type) return;\n"); + asb.append(" if (!(inputNode.className.indexOf('wicket-'+markupId)>=0)&&!(inputNode.id.indexOf(markupId+'-')>=0)) return;\n"); + asb.append(" var inputType = inputNode.type.toLowerCase();\n"); + asb.append(" if (inputType === 'checkbox' || inputType === 'radio') {\n"); + asb.append(" var name = inputNode.name, value = inputNode.value;\n"); + asb.append(" result.push({ name: name, value: value });\n"); + asb.append(" }\n"); // if (checkbox or radio) + asb.append(" }\n"); // if (tagName == 'input') + + // inputs' labels + asb.append(" else if (srcElement.tagName.toLowerCase() === 'label') {\n"); + asb.append(" var labelNode = srcElement;\n"); + asb.append(" if (!labelNode.htmlFor) return;\n"); + asb.append(" var inputNode = Wicket.$(labelNode.htmlFor);\n"); + asb.append(" if (!inputNode) return;\n"); + asb.append(" if (!(inputNode.className.indexOf('wicket-'+markupId)>=0)&&!(inputNode.id.indexOf(markupId+'-')>=0)) return;\n"); asb.append(" var inputType = inputNode.type.toLowerCase();\n"); asb.append(" if (inputType === 'checkbox' || inputType === 'radio') {\n"); asb.append(" var name = inputNode.name, value = inputNode.value;\n"); asb.append(" result.push({ name: name, value: value });\n"); - asb.append(" }\n"); // if - asb.append(" }\n"); // for + asb.append(" }\n"); // if (checkbox or radio) + asb.append(" }\n"); // else if (tagName == 'label') + asb.append(" }\n"); // if (srcElement) + asb.append(" return result;\n"); asb.append(" }\n"); // function getInputValues() - asb.append(" attrs.dep = (attrs.dep || []).concat([ function() { var deps = getInputValues(markupId); return deps; } ]);\n"); + asb.append(" attrs.dep = (attrs.dep || []).concat([ function(attributes) { var deps = getInputValues(markupId, attributes); return deps; } ]);\n"); asb.append(" Wicket.Ajax.post(attrs);\n"); asb.append("}\n"); // function attachChoiceHandlers()
