PluginProbe ʕ •ᴥ•ʔ
Conditional Fields for Contact Form 7 / 1.2.3
Conditional Fields for Contact Form 7 v1.2.3
2.7.10 2.7.9 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
231 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) {
18
19 //for compatibility with contact-form-7-signature-addon
20 if (cf7signature_resized == 0 && typeof signatures !== 'undefined' && signatures.constructor === Array && signatures.length > 0 ) {
21 for (var i = 0; i < signatures.length; i++) {
22 if (signatures[i].canvas.width == 0) {
23
24 jQuery(".wpcf7-form-control-signature-body>canvas").eq(i).attr('width', jQuery(".wpcf7-form-control-signature-wrap").width());
25 jQuery(".wpcf7-form-control-signature-body>canvas").eq(i).attr('height', jQuery(".wpcf7-form-control-signature-wrap").height());
26
27 cf7signature_resized = 1;
28 }
29 }
30 }
31
32 $("#"+unit_tag+" [data-class='wpcf7cf_group']").hide().addClass('wpcf7cf-hidden');
33 for (var i=0; i < wpcf7cf_conditions.length; i++) {
34
35 var condition = wpcf7cf_conditions[i];
36
37 var regex_patt = new RegExp(condition.if_value,'i');
38
39 $field = $('#'+unit_tag+' [name="'+condition.if_field+'"]').length ? $('#'+unit_tag+' [name="'+condition.if_field+'"]') : $('#'+unit_tag+' [name="'+condition.if_field+'[]"]');
40
41 if ($field.length == 1) {
42
43 // single field (tested with text field, single checkbox, select with single value (dropdown), select with multiple values)
44
45 if ($field.is('select')) {
46
47 var show = false;
48
49 if(condition.operator == 'not equals') {
50 show = true;
51 }
52
53 $field.find('option:selected').each(function () {
54 var $option = $(this);
55 if (
56 condition.operator == 'equals' && $option.val() == condition.if_value ||
57 condition.operator == 'equals (regex)' && regex_patt.test($option.val())
58 ) {
59 show = true;
60 } else if (
61 condition.operator == 'not equals' && $option.val() == condition.if_value ||
62 condition.operator == 'not equals (regex)' && !regex_patt.test($option.val())
63 ) {
64 show = false;
65 }
66 });
67
68 if(show == true) {
69 $('#' + unit_tag + ' #' + condition.then_field).show().removeClass('wpcf7cf-hidden');
70 }
71
72 continue;
73 }
74
75 if ($field.attr('type') == 'checkbox') {
76 if (
77 condition.operator == 'equals' && $field.is(':checked') && $field.val() == condition.if_value ||
78 condition.operator == 'not equals' && !$field.is(':checked') ||
79 condition.operator == 'is empty' && !$field.is(':checked') ||
80 condition.operator == 'not empty' && $field.is(':checked') ||
81 condition.operator == '>' && $field.is(':checked') && $field.val() > condition.if_value ||
82 condition.operator == '<' && $field.is(':checked') && $field.val() < condition.if_value ||
83 condition.operator == '>=' && $field.is(':checked') && $field.val() >= condition.if_value ||
84 condition.operator == '<=' && $field.is(':checked') && $field.val() <= condition.if_value ||
85 condition.operator == 'equals (regex)' && $field.is(':checked') && regex_patt.test($field.val()) ||
86 condition.operator == 'not equals (regex)' && !$field.is(':checked')
87 ) {
88 $('#'+unit_tag+' #'+condition.then_field).show().removeClass('wpcf7cf-hidden');
89 }
90 } else if (
91 ( condition.operator == 'equals' && $field.val() == condition.if_value ) ||
92 ( condition.operator == 'not equals' && $field.val() != condition.if_value ) ||
93 ( condition.operator == 'equals (regex)' && regex_patt.test($field.val()) ) ||
94 ( condition.operator == 'not equals (regex)' && !regex_patt.test($field.val()) ) ||
95 ( condition.operator == '>' && $field.val() > condition.if_value ) ||
96 ( condition.operator == '<' && $field.val() < condition.if_value ) ||
97 ( condition.operator == '>=' && $field.val() >= condition.if_value ) ||
98 ( condition.operator == '<=' && $field.val() <= condition.if_value ) ||
99 ( condition.operator == 'is empty' && $field.val() == '' ) ||
100 ( condition.operator == 'not empty' && $field.val() != '' )
101 ) {
102 $('#'+unit_tag+' #'+condition.then_field).show().removeClass('wpcf7cf-hidden');
103 }
104
105
106 } else if ($field.length > 1) {
107
108 // multiple fields (tested with checkboxes, exclusive checkboxes, dropdown with multiple values)
109
110 var all_values = [];
111 var checked_values = [];
112 $field.each(function() {
113 all_values.push($(this).val());
114 if($(this).is(':checked')) {
115 checked_values.push($(this).val());
116 }
117 });
118
119 var checked_value_index = $.inArray(condition.if_value, checked_values);
120 var value_index = $.inArray(condition.if_value, all_values);
121
122 // console.log(all_values);
123 // console.log(checked_values);
124 // console.log(condition);
125 // console.log(value_index);
126 // console.log(checked_value_index);
127
128 if (
129 ( condition.operator == 'is empty' && checked_values.length == 0 ) ||
130 ( condition.operator == 'not empty' && checked_values.length > 0 )
131 ) {
132 $('#'+unit_tag+' #'+condition.then_field).show().removeClass('wpcf7cf-hidden');
133 }
134
135
136 for(var ind=0; ind<checked_values.length; ind++) {
137 if (
138 ( condition.operator == 'equals' && checked_values[ind] == condition.if_value ) ||
139 ( condition.operator == 'not equals' && checked_values[ind] != condition.if_value ) ||
140 ( condition.operator == 'equals (regex)' && regex_patt.test(checked_values[ind]) ) ||
141 ( condition.operator == 'not equals (regex)' && !regex_patt.test(checked_values[ind]) ) ||
142 ( condition.operator == '>' && checked_values[ind] > condition.if_value ) ||
143 ( condition.operator == '<' && checked_values[ind] < condition.if_value ) ||
144 ( condition.operator == '>=' && checked_values[ind] >= condition.if_value ) ||
145 ( condition.operator == '<=' && checked_values[ind] <= condition.if_value )
146 ) {
147 $('#'+unit_tag+' #'+condition.then_field).show().removeClass('wpcf7cf-hidden');
148 }
149 }
150 }
151
152 }
153 }
154
155 for (var i = 0; i<options.length; i++) {
156 var unit_tag = options[i]['unit_tag'];
157 var conditions = options[i]['conditions'];
158 display_fields(unit_tag, conditions);
159 $('#'+unit_tag+' input, #'+unit_tag+' select, #'+unit_tag+' textarea').change({unit_tag:unit_tag, conditions:conditions}, function(e) {
160 display_fields(e.data.unit_tag, e.data.conditions);
161 });
162 }
163
164 // before the form values are serialized to submit via ajax, we quickly add all invisible fields in the hidden
165 // _wpcf7cf_hidden_group_fields field, so the PHP code knows which fields were inside hidden groups.
166 $('form.wpcf7-form').on('form-pre-serialize', function(form,options,veto) {
167 $form = $(form.target);
168 wpcf7cf_update_hidden_fields($form);
169 });
170 // Actually we need to add the hidden fields values after every change in case the form values
171 // get submitted trough Ajax by another plugin (Example multi-step form plugins)
172 $('form.wpcf7-form :input').change(function() {
173 wpcf7cf_update_hidden_fields($(this).closest('form'));
174 });
175 // And in case a form gets submitted without any input:
176 $('form.wpcf7-form').each(function(){
177 wpcf7cf_update_hidden_fields($(this));
178 });
179 });
180
181 function wpcf7cf_update_hidden_fields($form) {
182
183 $hidden_group_fields = $form.find('[name="_wpcf7cf_hidden_group_fields"]');
184 $hidden_groups = $form.find('[name="_wpcf7cf_hidden_groups"]');
185 $visible_groups = $form.find('[name="_wpcf7cf_visible_groups"]');
186
187 var hidden_fields = [];
188 var hidden_groups = [];
189 var visible_groups = [];
190
191 $form.find('[data-class="wpcf7cf_group"]').each(function () {
192 var $this = $(this);
193 if ($this.hasClass('wpcf7cf-hidden')) {
194 hidden_groups.push($this.attr('id'));
195 $this.find('input,select,textarea').each(function () {
196 hidden_fields.push($(this).attr('name'));
197 });
198 } else {
199 visible_groups.push($this.attr('id'));
200 }
201 });
202
203 $hidden_group_fields.val(JSON.stringify(hidden_fields));
204 $hidden_groups.val(JSON.stringify(hidden_groups));
205 $visible_groups.val(JSON.stringify(visible_groups));
206
207 return true;
208 }
209
210 //reset the form completely
211 $( document ).ajaxComplete(function(e,xhr) {
212 if( typeof xhr.responseJSON !== 'undefined' &&
213 typeof xhr.responseJSON.mailSent !== 'undefined' &&
214 typeof xhr.responseJSON.into !== 'undefined' &&
215 xhr.responseJSON.mailSent === true)
216 {
217 $( xhr.responseJSON.into + ' input, '+xhr.responseJSON.into+' select, ' + xhr.responseJSON.into + ' textarea' ).change();
218 }
219 });
220
221 // fix for exclusive checkboxes in IE (this will call the change-event again after all other checkboxes are unchecked, triggering the display_fields() function)
222 var old_wpcf7ExclusiveCheckbox = $.fn.wpcf7ExclusiveCheckbox;
223 $.fn.wpcf7ExclusiveCheckbox = function() {
224 return this.find('input:checkbox').click(function() {
225 var name = $(this).attr('name');
226 $(this).closest('form').find('input:checkbox[name="' + name + '"]').not(this).prop('checked', false).eq(0).change();
227 });
228 };
229
230 })( jQuery );
231