var form, tab; $(function() { //=============================================== // Validate //=============================================== $.validator.setDefaults({ highlight: function (element) { $("[name='"+ $(element).attr("name") + "']").addClass('is-invalid'); $("[name='"+ $(element).attr("name") + "']").removeClass('is-valid'); }, unhighlight: function (element) { $("[name='"+ $(element).attr("name") + "']").removeClass('is-invalid'); $("[name='"+ $(element).attr("name") + "']").addClass('is-valid'); }, errorElement: 'div', errorClass: 'invalid-feedback', errorPlacement: function (error, element) { if(element.closest(".form-group").length > 0) { error.appendTo(element.closest(".form-group")); } else { error.insertAfter(element); } } }); jQuery.validator.addMethod("telephoneFR", function(value, element) { return this.optional(element) || /^(01|02|03|04|05|06|07|08|09)[0-9]{8}$/.test(value); }, 'Veuillez fournir un numéro de téléphone valide.'); $("#form_contact").validate({ submitHandler: function(form) { // $('#destinataire').val(d); // $('#destinataire_cc').val(dcc); $.ajax({ type: "POST", url: "https://assetz.loperata.corsica/commun/json.html?snippet=forms&action=save", async: false, data: $("#form_contact").serialize(), dataType : 'json', success: function(d){ $("#modal_contact_fin").modal("show"); } }); }, rules: { telephone: { required: true, telephoneFR: true } }, errorPlacement: function(error, element) { var errorClass = ".form-group"; if(element.closest(errorClass).length) { error.appendTo(element.closest(errorClass)); } else { error.appendTo(element.parent()); } } }); //=============================================== // Collapse //=============================================== var input_collapse = []; $("[data-input-collapse]", form).each(function() { name = $(this).attr("name"); if(input_collapse.indexOf(name) == -1) { input_collapse.push(name); input = $("[name='" + name + "']", form); $(input).on("change", {"input": input}, debounce(function(e) { input = e.data["input"]; targets = []; if($(input).is(":radio, :checkbox")) { $(input).filter(":checked").each(function() { target = $(this).attr("data-input-collapse"); if(target !== undefined) { $(target).collapse("show"); targets.push(target) } }); $(input).not(":checked").each(function() { target = $(this).attr("data-input-collapse"); if($.inArray(target, targets) == -1 && $(target).length > 0) { $(target).collapse("hide"); $("input, select, textarea", target).not(":checkbox, :radio").val(""); $("input", target).filter(":checkbox, :radio").prop("checked", false); $(".invalid-feedback", target).hide(); $(".is-invalid", target).toggleClass("is-invalid", false); $(".is-valid", target).toggleClass("is-valid", false); } }); } else if($(input).is("select")) { target = $("option[data-input-collapse][value='" + $(input).val() + "']", input).attr("data-input-collapse"); if(target !== undefined) { $(target).collapse("show"); targets.push(target) } $("option[data-input-collapse]", input).each(function() { target = $(this).attr("data-input-collapse"); if($.inArray(target, targets) == -1 && $(target).length > 0) { $(target).collapse("hide"); $("input, select, textarea", target).not(":checkbox, :radio").val(""); $("input", target).filter(":checkbox, :radio").prop("checked", false); $(".invalid-feedback", target).hide(); $(".is-invalid", target).toggleClass("is-invalid", false); $(".is-valid", target).toggleClass("is-valid", false); } }); } }, 100)); } }); //=============================================== // toggle-content //=============================================== // [data-toggle-content] => true // [data-toggle-wrapper] => toggle[id] var toggleArray = []; $("[data-toggle-content]").each(function() { field = $(this).is("option") ? $(this).parent() : this; if ($.inArray($(field).attr("name"), toggleArray) == -1) { var form = $(field).closest("form"); var name = $(field).attr("name"); toggleArray.push(name); if ($("[name='" + name + "']", form).is("select")) { $("[name='" + name + "']", form).on("change", function() { $("[name='" + name + "'] option", form).filter("[data-toggle-content]").each(function() { var toggle_wrapper = $(this).attr("data-toggle-wrapper") !== undefined && $(this).attr("data-toggle-wrapper") != "" ? $(this).attr("data-toggle-wrapper") : $("#toggle_" + $(this).attr("id"), form); if ($(this).is(":selected")) { $(toggle_wrapper).trigger("slideDown_start"); $(toggle_wrapper).slideDown(400, function() { $(toggle_wrapper).trigger("slideDown_end"); }); } else { $(toggle_wrapper).trigger("slideUp_start"); $(toggle_wrapper).slideUp(400, function() { $(toggle_wrapper).trigger("slideUp_end"); }); $("input, select, textarea", toggle_wrapper).not("[type='checkbox'], [type='radio'], .no-reset, .onGarde").val(""); $("input", toggle_wrapper).filter("[type='checkbox'], [type='radio']").each(function() { $(this).prop("checked", $(this).attr("checked") != undefined); }); $(".invalid-feedback, .toggle", toggle_wrapper).hide(); } }); }); } else { $("[name='" + name + "']", form).on("click", function() { $("[name='" + name + "']", form).filter("[data-toggle-content]").each(function() { var toggle_wrapper = $(this).attr("data-toggle-wrapper") !== undefined && $(this).attr("data-toggle-wrapper") != "" ? $(this).attr("data-toggle-wrapper") : $("#toggle_" + $(this).attr("id"), form); if ($(this).is(":checked")) { $(toggle_wrapper).trigger("slideDown_start"); $(toggle_wrapper).slideDown(400, function() { $(toggle_wrapper).trigger("slideDown_end"); }); } else { $(toggle_wrapper).trigger("slideUp_start"); $(toggle_wrapper).slideUp(400, function() { $(toggle_wrapper).trigger("slideUp_end"); }); $("input, select, textarea", toggle_wrapper).not("[type='checkbox'], [type='radio'], .no-reset, .onGarde").val(""); $("input", toggle_wrapper).filter("[type='checkbox'], [type='radio']").each(function() { $(this).prop("checked", $(this).attr("checked") != undefined); }); $(".invalid-feedback, .toggle", toggle_wrapper).hide(); } }); }); } } }); }); //=============================================== // functions //=============================================== function debounce(fn, time) { var timerId = null; return function(e) { if(timerId) return; timerId = setTimeout(function() { fn(e); timerId = null; }, time); } }