From 5568ee78751a8a9e09ebd18b238452da62502d64 Mon Sep 17 00:00:00 2001 From: Will Rossiter Date: Fri, 25 Jul 2014 14:52:56 +1200 Subject: [PATCH] Fix CheckboxGroupField validation (Fixes #209) --- code/formfields/UserFormsCheckboxSetField.php | 23 ++++++++++++++++++ .../formfields/EditableCheckboxGroupField.php | 2 +- templates/ValidationScript.ss | 24 ++++++++++--------- 3 files changed, 37 insertions(+), 12 deletions(-) create mode 100644 code/formfields/UserFormsCheckboxSetField.php diff --git a/code/formfields/UserFormsCheckboxSetField.php b/code/formfields/UserFormsCheckboxSetField.php new file mode 100644 index 0000000..9a7621e --- /dev/null +++ b/code/formfields/UserFormsCheckboxSetField.php @@ -0,0 +1,23 @@ +Name = "{$this->name}[]"; + } + + return $options; + } +} \ No newline at end of file diff --git a/code/model/formfields/EditableCheckboxGroupField.php b/code/model/formfields/EditableCheckboxGroupField.php index 81ac630..d884ccf 100755 --- a/code/model/formfields/EditableCheckboxGroupField.php +++ b/code/model/formfields/EditableCheckboxGroupField.php @@ -19,7 +19,7 @@ class EditableCheckboxGroupField extends EditableMultipleOptionField { $optionMap = ($optionSet) ? $optionSet->map('EscapedTitle', 'Title') : array(); - return new CheckboxSetField($this->Name, $this->Title, $optionMap); + return new UserFormsCheckboxSetField($this->Name, $this->Title, $optionMap); } public function getValueFromData($data) { diff --git a/templates/ValidationScript.ss b/templates/ValidationScript.ss index 68105be..bec517d 100644 --- a/templates/ValidationScript.ss +++ b/templates/ValidationScript.ss @@ -1,29 +1,31 @@ (function($) { $(document).ready(function() { + var messages = {<% loop $Fields %><% if $ErrorMessage && not $SetsOwnError %><% if ClassName == EditableCheckboxGroupField %> + '{$Name.JS}[]': '{$ErrorMessage.JS}'<% else %> + '{$Name.JS}': '{$ErrorMessage.JS}',<% end_if %><% end_if %><% end_loop %> + }; + $("#Form_Form").validate({ ignore: ':hidden', errorClass: "required", errorElement: "span", errorPlacement: function(error, element) { - error.addClass('message') - if(element.is(":radio")) { + error.addClass('message'); + + if(element.is(":radio") || element.parents(".checkboxset").length > 0) { error.insertAfter(element.closest("ul")); } else { error.insertAfter(element); } }, - messages: { - <% loop $Fields %> - <% if $ErrorMessage && not $SetsOwnError %> - '{$Name.JS}': '{$ErrorMessage.JS}', - <% end_if %> - <% end_loop %> - }, + messages: messages, rules: { <% loop $Fields %> - <% if $Validation %> + <% if $Validation %><% if ClassName == EditableCheckboxGroupField %> + '{$Name.JS}[]': {$ValidationJSON.RAW} + <% else %> '{$Name.JS}': {$ValidationJSON.RAW}, - <% end_if %> + <% end_if %><% end_if %> <% end_loop %> }, <% if $EnableLiveValidation %>