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()
 

Reply via email to