var formName = "#contactForm"; let keyElms = document.createElement("input"); keyElms.setAttribute("name", "form_key"); keyElms.setAttribute("type", "hidden"); keyElms.setAttribute("value", "ac72be3eb139d6425131f20304bdd524"); document.querySelector(formName).appendChild(keyElms) // 読込 : GoogleReCAPCHA var tag = document.createElement('script'); tag.src = "https://www.google.com/recaptcha/api.js?render=6Lc36DQpAAAAAOG6qF91rLPx8sQEpoFZejxAy6lM"; var firstScriptTag = document.getElementsByTagName('script')[0]; firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); // 確認画面の生成処理(モーダル) function confirmGenerate(){ // 画面の基本生成 var Confirm = document.querySelector(formName).cloneNode(true); // 既存フォームをクローン $(Confirm).find("input[type='hidden']").remove(); // 削除:非表示項目 $(Confirm).find("button[type=submit]").remove(); // 削除:送信ボタン // SELECTの書換 $(Confirm).find("select").each(function(){ let thisName = $(this).attr("name"); let orgin = $(formName).find('select[name="' + thisName + '"]') let val = orgin.val(); $(this).replaceWith('
' + val + '
'); }); // 環境固有データの処理 let radioArr = {}; $(Confirm).find("input[type=radio]").each(function(){ // if(typeof radioArr[$(this).attr("name")] == "undefined"){ radioArr[$(this).attr("name")] = []; } // if(this.checked){ console.log($(this).val()); radioArr[$(this).attr("name")].push($(this).val()); } // if($(Confirm).find('[name="' + $(this).attr("name") + '"]').length == 1){ $(this).next("span").remove(); $(this).closest(".inner").replaceWith('
' + radioArr[$(this).attr("name")].join(" / ") + '
'); }else{ $(this).next("span").remove(); $(this).remove(); } }); for(tagName in radioArr){ $(Confirm).find('[name="' + tagName + '"]').closest(".input.radio").replaceWith('
' + radioArr[tagName].join(" / ") + '
'); } var checkval = ""; var checkboxes = $(formName).find("[name='service[]']:checked"); checkboxes.each(function() { checkval += $(this).val() + ", "; }); checkval = checkval.slice(0, -2); $(Confirm).find("[name='service[]']").closest(".input.check").replaceWith('
' + checkval + '
'); $(Confirm).find(".empty_space").remove(); // 入力タグの値を固定文字に置き換え $(Confirm).find("input, textarea").replaceWith(function() { let thisName = $(this).attr("name"); let orgin = $(formName).find('[name="' + thisName + '"]') let val = orgin.val(); $(this).replaceWith('
' + val + '
') }); // 結果の返却 return "以下の内容で送信します。
よろしいでしょうか?" + '
' + ($(Confirm).html()) + "
"; } $().ready(function() { $.validator.setDefaults({ errorElement: "div", submitHandler: function() { var Confirm = confirmGenerate(); Swal.fire({ title: '送信前確認', html : Confirm, showCancelButton: true, confirmButtonText: '送信', cancelButtonText: '戻る', reverseButtons: true, width : '80%', showClass: { popup: 'animated faster', // icon: 'animated heartBeat delay-1s' }, hideClass: { popup: 'animated fadeOutUp faster', // icon: 'animated heartBeat delay-1s' }, }).then((result) => { // 送信ボタンの検知 if (result.isConfirmed) { // googleReCaptchaStart grecaptcha.ready(function() { grecaptcha.execute('6Lc36DQpAAAAAOG6qF91rLPx8sQEpoFZejxAy6lM', {action: 'submit'}).then(function(token) { // Add your logic to submit to your backend server here. var mailForm = document.querySelector(formName); var recaptchaToken = mailForm.querySelector('[name="recaptchaToken"]'); if(!recaptchaToken){ recaptchaToken = document.createElement("input"); recaptchaToken.setAttribute("name", "recaptchaToken"); recaptchaToken.setAttribute("type", "hidden"); mailForm.appendChild(recaptchaToken); } recaptchaToken.value = token; // フォーム送信処理 $.ajax({ url : $(formName).attr('action'), type: $(formName).attr('method'), data: $(formName).serialize(), }) .done(function(data) { // 送信成功時の処理 var result = JSON.parse(data) if(result.result){ if(result.redirectURL){ Swal.fire({ icon: 'success', title: result.msg, }).then((res) => { location.href = result.redirectURL; }); }else{ Swal.fire({ icon: 'success', title: result.msg, }); } }else{ Swal.fire({ icon: 'error', title: result.msg, }) } }) .fail(function() { // 送信失敗時の処理 Swal.fire({ icon: 'error', title: '送信失敗しました。', }) }); }); }); } }) } }); // validate the comment form when it is submitted // validate signup form on keyup and submit $(formName).validate({ "rules" : { "service[]" : { "required" : true }, "navigator" : { "required" : true }, "name" : { "required" : true }, "company" : { "required" : true }, "position" : { "required" : true }, "email" : { "required" : true, "email" : true }, "tel" : { "pattern" : /(^0\d{1,3}-\d{1,4}-\d{4}$|^0\d{9,10}$)/i }, "address" : { "required" : true } }, "messages" : { "service[]" : "興味のある商品を選択してください。", "navigator" : "希望ナビゲーターを選択してください。", "name" : "お名前は必須です。", "company" : "会社名は必須です。", "position" : "役職は必須です。", "email" : { "required" : "メールアドレスは必須です。", "email" : "メールアドレスが正しくありません。" }, "tel" : { "required" : "電話番号は必須です。", "pattern" : "電話番号の形式が正しくありません。" }, "address" : "住所は必須です。" }, "errorPlacement" :function(error,element){ if (element.attr("name") == "service[]" ){ error.insertAfter(".serviceWrap .input"); } else if (element.attr("name") == "navigator" ){ error.insertAfter(".navigatorWrap .input"); } else { error.insertAfter(element); } } }); });