Updated Branches:
  refs/heads/master cdc3c8588 -> dd76a815c

WICKET-4769 Clicking on Label of Radio doesn't update component with Ajax update

Use a precondition to decide whether to make the Ajax call or not. The call is 
made only for clicks on <input>s.


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/dd76a815
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/dd76a815
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/dd76a815

Branch: refs/heads/master
Commit: dd76a815c7da21ef38e0deb36f2f51da25042f6f
Parents: cdc3c85
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Tue Oct 2 22:17:16 2012 +0300
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Tue Oct 2 22:17:16 2012 +0300

----------------------------------------------------------------------
 .../AjaxFormChoiceComponentUpdatingBehavior.java   |   37 ++++-----------
 1 files changed, 10 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/dd76a815/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 0a66b71..143fd6f 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
@@ -64,36 +64,19 @@ public abstract class 
AjaxFormChoiceComponentUpdatingBehavior extends AbstractDe
                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 (checkbox or radio)
-               asb.append("  }\n");  // else if (tagName == 'label')
-               asb.append(" }\n");  // if (srcElement)
+               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("  return result;\n");
                asb.append(" }\n"); // function getInputValues()
+               asb.append(" attrs.pre = (attrs.pre || []).concat([ 
function(attributes) { return attributes.event.target.tagName.toLowerCase() === 
'input'; } ]);\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