PluginProbe
King Addons for Elementor – 100+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce Builder, Mega Menu, Popup Builder / 51.1.86
King Addons for Elementor – 100+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce Builder, Mega Menu, Popup Builder v51.1.86
51.1.86 51.1.84 51.1.85 51.1.83 51.1.82 51.1.81 51.1.79 51.1.78 51.1.77 51.1.76 51.1.74 51.1.75 51.1.65 51.1.64 51.1.63 trunk 51.1.14 51.1.2 51.1.35 51.1.36 51.1.37 51.1.38 51.1.39 51.1.44 51.1.45 All 40 releases
← All changes | includes/widgets/Form_Builder/editor-handler.js +54 -41 51.1.44 → 51.1.86 View file →
@@ -182,58 +182,49 @@
182 182 stateField,
183 183 zipField,
184 184 ];
185 185
186 - const options = { none: "None" };
187 - let prevFieldId;
186 + const options = {none: "None"};
187 + const seenIds = {};
188 + $panelRoot.find(".king-addons-field-id-dup-notice").remove();
188 189
189 190 formFieldsModel.each(function (field) {
190 191 const fieldLabel = field.get("field_label");
191 - const fieldId = field.get("field_id");
192 + let fieldId = (field.get("field_id") || "").toString().trim();
193 + const fallbackId = (field.get("_id") || "").toString();
192 194
193 - if (prevFieldId === fieldId) {
194 - $panelRoot
195 - .find(":input[value=" + field.attributes._id + "]")
196 - .closest(".elementor-repeater-fields")
197 - .find(':input[data-setting="field_id"]')
198 - .val(field.attributes._id);
199 - $panelRoot
200 - .find(":input[value=" + field.attributes._id + "]")
201 - .closest(".elementor-repeater-fields")
202 - .find(".king-addons-form-field-shortcode")
203 - .val('id=["' + field.attributes._id + '"]');
204 - field.attributes.field_id = field.attributes._id;
195 + if (!fieldId && fallbackId) {
196 + assignFieldId(field, fallbackId);
197 + fieldId = fallbackId;
205 198 }
206 199
207 - prevFieldId = fieldId;
200 + if (fieldId && seenIds[fieldId]) {
201 + const $wrap = $panelRoot.find(".elementor-repeater-fields-wrapper").first();
202 + if ($wrap.length && !$panelRoot.find(".king-addons-field-id-dup-notice").length) {
203 + $wrap.prepend(
204 + '<div class="elementor-panel-alert elementor-panel-alert-warning king-addons-field-id-dup-notice">' +
205 + "Two fields share the same Field ID. Each ID must be unique or submitted values will collide." +
206 + "</div>"
207 + );
208 + }
209 + }
208 210
209 - if (!fieldId) {
210 - $panelRoot
211 - .find(":input[value=" + field.attributes._id + "]")
212 - .closest(".elementor-repeater-fields")
213 - .find(':input[data-setting="field_id"]')
214 - .val(field.attributes._id);
215 - $panelRoot
216 - .find(":input[value=" + field.attributes._id + "]")
217 - .closest(".elementor-repeater-fields")
218 - .find(".king-addons-form-field-shortcode")
219 - .val('id=["' + field.attributes._id + '"]');
220 - field.attributes.field_id = field.attributes._id;
211 + if (fieldId) {
212 + seenIds[fieldId] = true;
213 + options[fieldId] = fieldLabel;
221 214 }
222 -
223 - options[fieldId] = fieldLabel;
224 215 });
225 216
226 - view.model.setSetting("email_field", _.extend(emailField, { options }));
227 - view.model.setSetting("first_name_field", _.extend(firstNameField, { options }));
228 - view.model.setSetting("last_name_field", _.extend(lastNameField, { options }));
229 - view.model.setSetting("phone_field", _.extend(phoneField, { options }));
230 - view.model.setSetting("birthday_field", _.extend(birthdayField, { options }));
231 - view.model.setSetting("address_field", _.extend(addressField, { options }));
232 - view.model.setSetting("country_field", _.extend(countryField, { options }));
233 - view.model.setSetting("city_field", _.extend(cityField, { options }));
234 - view.model.setSetting("state_field", _.extend(stateField, { options }));
235 - view.model.setSetting("zip_field", _.extend(zipField, { options }));
217 + view.model.setSetting("email_field", _.extend(emailField, {options}));
218 + view.model.setSetting("first_name_field", _.extend(firstNameField, {options}));
219 + view.model.setSetting("last_name_field", _.extend(lastNameField, {options}));
220 + view.model.setSetting("phone_field", _.extend(phoneField, {options}));
221 + view.model.setSetting("birthday_field", _.extend(birthdayField, {options}));
222 + view.model.setSetting("address_field", _.extend(addressField, {options}));
223 + view.model.setSetting("country_field", _.extend(countryField, {options}));
224 + view.model.setSetting("city_field", _.extend(cityField, {options}));
225 + view.model.setSetting("state_field", _.extend(stateField, {options}));
226 + view.model.setSetting("zip_field", _.extend(zipField, {options}));
236 227
237 228 _.each(selectControls, function (control) {
238 229 control.empty();
239 230 });
@@ -246,8 +237,29 @@
246 237 );
247 238 });
248 239 });
249 240 }
241 +
242 + function assignFieldId(field, nextId) {
243 + if (!field || !nextId) {
244 + return;
245 + }
246 +
247 + if (typeof field.setSetting === "function") {
248 + field.setSetting("field_id", nextId);
249 + } else if (typeof field.set === "function") {
250 + field.set("field_id", nextId);
251 + } else {
252 + field.attributes.field_id = nextId;
253 + }
254 +
255 + const $row = $panelRoot
256 + .find(":input[value=" + field.attributes._id + "]")
257 + .closest(".elementor-repeater-fields");
258 + $row.find(':input[data-setting="field_id"]').val(nextId);
259 + $row.find(".king-addons-form-field-shortcode").val('id=["' + nextId + '"]');
260 + }
261 +
250 262 // Change the selector below to match the field_id field in your repeater.
251 263 const customIdFieldSelector = 'input[data-setting="field_id"]';
252 264
253 265 // Change the selector below to match the shortcode field in your repeater.
@@ -274,10 +286,11 @@
274 286
275 287 $shortcodeField.val(updatedShortcode);
276 288 });
277 289 });
278 - );
290 + ;
279 291 });
280 292 };
293 +
281 294
282 295 bindOnce();
283 296 }(jQuery));