PluginProbe ʕ •ᴥ•ʔ
Conditional Fields for Contact Form 7 / 1.3
Conditional Fields for Contact Form 7 v1.3
2.7.8 2.7.7 2.7.6 2.7.5 2.7.4 2.7.3 2.7.2 0.2.4 0.2.5 0.2.6 0.2.7 0.2.8 0.2.9 1.0 1.1 1.2 1.2.1 1.2.2 1.2.3 1.3 1.3.1 1.3.2 1.3.3 1.3.4 1.4 1.4.1 1.4.2 1.4.3 1.5 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.6.1 1.6.2 1.6.3 1.6.5 1.7 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.8 1.7.9 1.8 1.8.1 1.8.2 1.8.3 1.8.5 1.8.6 1.8.7 1.9 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.15 1.9.16 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.2 2.2.1 2.2.10 2.2.11 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.2.7 2.2.8 2.2.9 2.3 2.3.1 2.3.10 2.3.11 2.3.12 2.3.2 2.3.3 2.3.4 2.3.5 2.3.6 2.3.7 2.3.8 2.3.9 2.4 2.4.1 2.4.10 2.4.11 2.4.12 2.4.13 2.4.14 2.4.15 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.5 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.14 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6 2.6.1 2.6.2 2.6.3 2.6.4 2.6.5 2.6.6 2.6.7 2.6.8 2.7 2.7.1 trunk 0.1 0.1.1 0.1.2 0.1.3 0.1.4 0.1.5 0.1.6 0.1.7 0.2 0.2.1 0.2.2 0.2.3
cf7-conditional-fields / js / scripts.js
cf7-conditional-fields / js Last commit date
scripts.js 9 years ago scripts_admin.js 9 years ago
scripts.js
268 lines
1 var cf7signature_resized = 0; // for compatibility with contact-form-7-signature-addon
2
3 (function($) {
4
5 var i=0;
6 var options = [];
7 while (true) {
8 i++;
9 if ('wpcf7cf_options_'+i in window) {
10 options.push(window['wpcf7cf_options_'+i]);
11 continue;
12 }
13 break;
14 }
15
16 $(document).ready(function() {
17 function display_fields(unit_tag, wpcf7cf_conditions, wpcf7cf_settings) {
18
19 console.log('display fields');
20
21 //for compatibility with contact-form-7-signature-addon
22 if (cf7signature_resized == 0 && typeof signatures !== 'undefined' && signatures.constructor === Array && signatures.length > 0 ) {
23 for (var i = 0; i < signatures.length; i++) {
24 if (signatures[i].canvas.width == 0) {
25
26 jQuery(".wpcf7-form-control-signature-body>canvas").eq(i).attr('width', jQuery(".wpcf7-form-control-signature-wrap").width());
27 jQuery(".wpcf7-form-control-signature-body>canvas").eq(i).attr('height', jQuery(".wpcf7-form-control-signature-wrap").height());
28
29 cf7signature_resized = 1;
30 }
31 }
32 }
33
34 $("#"+unit_tag+" [data-class='wpcf7cf_group']").addClass('wpcf7cf-hidden');
35
36 for (var i=0; i < wpcf7cf_conditions.length; i++) {
37
38 var condition = wpcf7cf_conditions[i];
39
40 var regex_patt = new RegExp(condition.if_value,'i');
41
42 $field = $('#'+unit_tag+' [name="'+condition.if_field+'"]').length ? $('#'+unit_tag+' [name="'+condition.if_field+'"]') : $('#'+unit_tag+' [name="'+condition.if_field+'[]"]');
43
44 if ($field.length == 1) {
45
46 // single field (tested with text field, single checkbox, select with single value (dropdown), select with multiple values)
47
48 if ($field.is('select')) {
49
50 var show = false;
51
52 if(condition.operator == 'not equals') {
53 show = true;
54 }
55
56 $field.find('option:selected').each(function () {
57 var $option = $(this);
58 if (
59 condition.operator == 'equals' && $option.val() == condition.if_value ||
60 condition.operator == 'equals (regex)' && regex_patt.test($option.val())
61 ) {
62 show = true;
63 } else if (
64 condition.operator == 'not equals' && $option.val() == condition.if_value ||
65 condition.operator == 'not equals (regex)' && !regex_patt.test($option.val())
66 ) {
67 show = false;
68 }
69 });
70
71 if(show == true) {
72 $('#' + unit_tag + ' #' + condition.then_field).removeClass('wpcf7cf-hidden');
73 }
74
75 continue;
76 }
77
78 if ($field.attr('type') == 'checkbox') {
79 if (
80 condition.operator == 'equals' && $field.is(':checked') && $field.val() == condition.if_value ||
81 condition.operator == 'not equals' && !$field.is(':checked') ||
82 condition.operator == 'is empty' && !$field.is(':checked') ||
83 condition.operator == 'not empty' && $field.is(':checked') ||
84 condition.operator == '>' && $field.is(':checked') && $field.val() > condition.if_value ||
85 condition.operator == '<' && $field.is(':checked') && $field.val() < condition.if_value ||
86 condition.operator == '>=' && $field.is(':checked') && $field.val() >= condition.if_value ||
87 condition.operator == '<=' && $field.is(':checked') && $field.val() <= condition.if_value ||
88 condition.operator == 'equals (regex)' && $field.is(':checked') && regex_patt.test($field.val()) ||
89 condition.operator == 'not equals (regex)' && !$field.is(':checked')
90 ) {
91 $('#'+unit_tag+' #'+condition.then_field).removeClass('wpcf7cf-hidden');
92 }
93 } else if (
94 ( condition.operator == 'equals' && $field.val() == condition.if_value ) ||
95 ( condition.operator == 'not equals' && $field.val() != condition.if_value ) ||
96 ( condition.operator == 'equals (regex)' && regex_patt.test($field.val()) ) ||
97 ( condition.operator == 'not equals (regex)' && !regex_patt.test($field.val()) ) ||
98 ( condition.operator == '>' && $field.val() > condition.if_value ) ||
99 ( condition.operator == '<' && $field.val() < condition.if_value ) ||
100 ( condition.operator == '>=' && $field.val() >= condition.if_value ) ||
101 ( condition.operator == '<=' && $field.val() <= condition.if_value ) ||
102 ( condition.operator == 'is empty' && $field.val() == '' ) ||
103 ( condition.operator == 'not empty' && $field.val() != '' )
104 ) {
105 $('#'+unit_tag+' #'+condition.then_field).removeClass('wpcf7cf-hidden');
106 }
107
108
109 } else if ($field.length > 1) {
110
111 // multiple fields (tested with checkboxes, exclusive checkboxes, dropdown with multiple values)
112
113 var all_values = [];
114 var checked_values = [];
115 $field.each(function() {
116 all_values.push($(this).val());
117 if($(this).is(':checked')) {
118 checked_values.push($(this).val());
119 }
120 });
121
122 var checked_value_index = $.inArray(condition.if_value, checked_values);
123 var value_index = $.inArray(condition.if_value, all_values);
124
125 // console.log(all_values);
126 // console.log(checked_values);
127 // console.log(condition);
128 // console.log(value_index);
129 // console.log(checked_value_index);
130
131 if (
132 ( condition.operator == 'is empty' && checked_values.length == 0 ) ||
133 ( condition.operator == 'not empty' && checked_values.length > 0 )
134 ) {
135 $('#'+unit_tag+' #'+condition.then_field).removeClass('wpcf7cf-hidden');
136 }
137
138
139 for(var ind=0; ind<checked_values.length; ind++) {
140 if (
141 ( condition.operator == 'equals' && checked_values[ind] == condition.if_value ) ||
142 ( condition.operator == 'not equals' && checked_values[ind] != condition.if_value ) ||
143 ( condition.operator == 'equals (regex)' && regex_patt.test(checked_values[ind]) ) ||
144 ( condition.operator == 'not equals (regex)' && !regex_patt.test(checked_values[ind]) ) ||
145 ( condition.operator == '>' && checked_values[ind] > condition.if_value ) ||
146 ( condition.operator == '<' && checked_values[ind] < condition.if_value ) ||
147 ( condition.operator == '>=' && checked_values[ind] >= condition.if_value ) ||
148 ( condition.operator == '<=' && checked_values[ind] <= condition.if_value )
149 ) {
150 $('#'+unit_tag+' #'+condition.then_field).removeClass('wpcf7cf-hidden');
151 }
152 }
153 }
154 }
155
156 var show_animation = { "height": "show", "marginTop": "show", "marginBottom": "show", "paddingTop": "show", "paddingBottom": "show" };
157 var hide_animation = { "height": "hide", "marginTop": "hide", "marginBottom": "hide", "paddingTop": "hide", "paddingBottom": "hide" };
158
159 var animation_intime = parseInt(wpcf7cf_settings.animation_intime);
160 var animation_outtime = parseInt(wpcf7cf_settings.animation_outtime);
161
162 if (wpcf7cf_settings.animation == 'no') {
163 animation_intime = 0;
164 animation_outtime = 0;
165 }
166
167 $("#" + unit_tag + " [data-class='wpcf7cf_group']").each(function (index) {
168 $group = $(this);
169 if ($group.is(':animated')) $group.finish(); // stop any current animations on the group
170 if ($group.css('display') == 'none' && !$group.hasClass('wpcf7cf-hidden')) {
171 $group.animate(show_animation, animation_intime); // show
172 } else if ($group.css('display') != 'none' && $group.hasClass('wpcf7cf-hidden')) {
173 $group.animate(hide_animation, animation_outtime); // hide
174 }
175 });
176 }
177
178 var timeout;
179
180 for (var i = 0; i<options.length; i++) {
181
182 var unit_tag = options[i]['unit_tag'];
183 var conditions = options[i]['conditions'];
184 var settings = options[i]['settings'];
185
186 display_fields(unit_tag, conditions, settings);
187
188 $('#'+unit_tag+' input, #'+unit_tag+' select, #'+unit_tag+' textarea').on('input paste change',{unit_tag:unit_tag, conditions:conditions, settings:settings}, function(e) {
189 clearTimeout(timeout);
190 timeout = setTimeout(function() { display_fields(e.data.unit_tag, e.data.conditions, e.data.settings); }, 100);
191 });
192
193 // $('#'+unit_tag+' input:not([type="radio"]):not([type="checkbox"]), #'+unit_tag+' textarea').on('input paste',{unit_tag:unit_tag, conditions:conditions, settings:settings}, function(e) {
194 // clearTimeout(timeout);
195 // timeout = setTimeout(function() { display_fields(e.data.unit_tag, e.data.conditions, e.data.settings) }, 400);
196 // });
197
198 // bring form in initial state if
199 $('#'+unit_tag+' form').on('reset', {unit_tag:unit_tag, conditions:conditions, settings:settings}, function(e) {
200 setTimeout(function() { display_fields(e.data.unit_tag, e.data.conditions, e.data.settings); }, 200);
201 });
202
203 }
204
205 // before the form values are serialized to submit via ajax, we quickly add all invisible fields in the hidden
206 // _wpcf7cf_hidden_group_fields field, so the PHP code knows which fields were inside hidden groups.
207 $('form.wpcf7-form').on('form-pre-serialize', function(form,options,veto) {
208 $form = $(form.target);
209 wpcf7cf_update_hidden_fields($form);
210 });
211
212 // Also add hidden fields in case a form gets submitted without any input:
213 $('form.wpcf7-form').each(function(){
214 wpcf7cf_update_hidden_fields($(this));
215 });
216 });
217
218 function wpcf7cf_update_hidden_fields($form) {
219
220 $hidden_group_fields = $form.find('[name="_wpcf7cf_hidden_group_fields"]');
221 $hidden_groups = $form.find('[name="_wpcf7cf_hidden_groups"]');
222 $visible_groups = $form.find('[name="_wpcf7cf_visible_groups"]');
223
224 var hidden_fields = [];
225 var hidden_groups = [];
226 var visible_groups = [];
227
228 $form.find('[data-class="wpcf7cf_group"]').each(function () {
229 var $this = $(this);
230 if ($this.hasClass('wpcf7cf-hidden')) {
231 hidden_groups.push($this.attr('id'));
232 $this.find('input,select,textarea').each(function () {
233 hidden_fields.push($(this).attr('name'));
234 });
235 } else {
236 visible_groups.push($this.attr('id'));
237 }
238 });
239
240 $hidden_group_fields.val(JSON.stringify(hidden_fields));
241 $hidden_groups.val(JSON.stringify(hidden_groups));
242 $visible_groups.val(JSON.stringify(visible_groups));
243
244 return true;
245 }
246
247 //reset the form completely
248 $( document ).ajaxComplete(function(e,xhr) {
249 if( typeof xhr.responseJSON !== 'undefined' &&
250 typeof xhr.responseJSON.mailSent !== 'undefined' &&
251 typeof xhr.responseJSON.into !== 'undefined' &&
252 xhr.responseJSON.mailSent === true)
253 {
254 $( xhr.responseJSON.into + ' input, '+xhr.responseJSON.into+' select, ' + xhr.responseJSON.into + ' textarea' ).change();
255 }
256 });
257
258 // fix for exclusive checkboxes in IE (this will call the change-event again after all other checkboxes are unchecked, triggering the display_fields() function)
259 var old_wpcf7ExclusiveCheckbox = $.fn.wpcf7ExclusiveCheckbox;
260 $.fn.wpcf7ExclusiveCheckbox = function() {
261 return this.find('input:checkbox').click(function() {
262 var name = $(this).attr('name');
263 $(this).closest('form').find('input:checkbox[name="' + name + '"]').not(this).prop('checked', false).eq(0).change();
264 });
265 };
266
267 })( jQuery );
268