質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

1回答

790閲覧

【WordPress】固定ページに作成したフォームのバリデート(jquery.validate.js)について

mst0

総合スコア9

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2021/05/19 05:55

編集2021/05/19 06:27

状況・前提・実現したいこと

WordPressでサイトを作成しており、お問合せフォームはプラグインなどを使用せずに固定ページで問い合わせフォームを作成しています。
また、フォーム自体はGoogleフォームを利用しており、Googleフォームの各項目のname値をフォームのinputタグに設定して見た目はオリジナルデザイン、フォームの機能はGoogleフォームを利用しているといったイメージです。
※コンタクトフォーム7はスパムメールが多いため利用していません。

必須項目が未入力状態での送信を防ぐために jquery.validate.js を使って、エラーメッセージを表示するjsを設置しています。
こちらの jquery.validate.js は静的HTMLでも利用したことがあり、導入したサイトについては問題なく使用できています。

バリデートを選択した理由

inputにrequiredを設定する方法ではなく、バリデートを選択した理由としては、チェックボックスに必須項目を設定している箇所がいくつかあり(複数選択可)の項目に設定しているため、ユーザーが意図しない項目を選択しなければ送信ができないという状況が発生してしまうためです。

発生している問題・エラーメッセージ

静的HTMLの時と同様にWordPressの固定ページに下記の記述をしていますが、バリデートが上手く機能しません。
具体的にはエラーメッセージなどは表示されず、必須項目が未入力の状態でも送信が完了してしまいます。

文字数制限のため、ソースコードは抜粋して記載いたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

該当のソースコード

■WordPressのheader.php ※jQueryの読み込み部分のみ抜粋

<?php //WordPress本体に含まれているjQuery.noConflict();付きのjQuery本体を読み込ませない wp_deregister_script('jquery'); //jQueryを置き換える wp_enqueue_script('jquery', '//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js', array(), 'jquery'); ?>

■WordPressのお問い合わせフォーム(固定ページ)

<script language="javascript" type="text/javascript" src="<?php echo get_template_directory_uri(); ?>/js/jquery.validate.js"></script>

============
■バリデートとフォーム部分

<script type="text/javascript"> /* $(function(){ $("form").validate({ rules: { err :{ required: true } }, messages: { err :{ required: "※ 未入力です" } }, errorPlacement: function(error, element) { //指定タグの中に出したい場合はappendTo() error.appendTo($('.message')); } }); }) */ $().ready(function() { // validate signup form on keyup and submit $("form").validate({ rules: { user_name: "required", username: { required: true, }, user_name: "required", kana_name: { required: true, }, post: "required", username: { required: true, }, area: "required", username: { required: true, }, city: "required", username: { required: true, }, sex: "required", username: { required: true, }, age: "required", username: { required: true, }, calendar: "required", username: { required: true, }, mail: "required", username: { required: true, }, mokuteki: "required", username: { required: true, }, peoplenum: "required", username: { required: true, }, people: "required", username: { required: true, }, time: "required", username: { required: true, }, visitsnum: "required", username: { required: true, }, manzoku: "required", username: { required: true, }, media: "required", username: { required: true, }, username: { required: true, }, confirm_password: { required: true, minlength: 5, equalTo: "#password" }, topic: { required: "#newsletter:checked", minlength: 2 }, agree: "required" }, messages: { user_name: "お名前を入力してください", kana_name: "よみがなを入力してください", post: "郵便番号を入力してください", area: "都道府県を選択してください", city: "市区町村を入力してください", sex: "性別を選択してください", age: "ご年齢を選択してください", calendar: "ご来園日を入力してください", mail: "メールアドレスを入力してください", mokuteki: "当園の利用目的を1つ以上選択してください", peoplenum: "利用人数を選択してください", people: "どなたとお越しくださいましたか", time: "滞在時間を選択してください", visitsnum: "過去1年間の利用回数を選択してください", manzoku: "当園の満足度を選択してください", media: "当園を知ったきっかけを選択してください", }, confirm_password: { required: "「パスワード」を再入力してください", minlength: "「パスワード」は5文字以上で入力してください", equalTo: "パスワードが一致しません" }, }, errorPlacement: function(error,element){ switch(element.attr('id')) { case "user_name": error.insertAfter($('#message1')); break; case "kana_name": error.insertAfter($('#message2')); break; case "post": error.insertAfter($('#message3')); break; case "area": error.insertAfter($('#message4')); break; case "city": error.insertAfter($('#message5')); break; case "sex": error.insertAfter($('#message6')); break; case "age": error.insertAfter($('#message7')); break; case "calendar": error.insertAfter($('#message8')); break; case "mail": error.insertAfter($('#message9')); break; case "mokuteki": error.insertAfter($('#message10')); break; case "peoplenum": error.insertAfter($('#message11')); break; case "people": error.insertAfter($('#message12')); break; case "time": error.insertAfter($('#message13')); break; case "visitsnum": error.insertAfter($('#message14')); break; case "manzoku": error.insertAfter($('#message15')); break; case "media": error.insertAfter($('#message16')); break; default: error.insertAfter(element); } } }); // propose username by combining first- and lastname $("#username").focus(function() { var firstname = $("#firstname").val(); var lastname = $("#lastname").val(); if(firstname && lastname && !this.value) { this.value = firstname + "." + lastname; } }); //code to hide topic selection, disable for demo var newsletter = $("#newsletter"); // newsletter topics are optional, hide at first var inital = newsletter.is(":checked"); var topics = $("#newsletter_topics")[inital ? "removeClass" : "addClass"]("gray"); var topicInputs = topics.find("input").attr("disabled", !inital); // show when newsletter is checked newsletter.click(function() { topics[this.checked ? "removeClass" : "addClass"]("gray"); topicInputs.attr("disabled", !this.checked); }); }); </script>

投稿2021/05/19 05:57

mst0

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mst0

2021/05/19 06:01 編集

<article class="form_box"> <dl class="enquete"> <dt>Q1・当園の利用目的をお教えください。(複数回答可)</dt> <dd> <p> <label id="message10"></label> </p> <label> <input type="checkbox" name="entry.1018408968" id="mokuteki" value="自然観察"/> 自然観察</label> <label> <input type="checkbox" name="entry.1018408968" id="mokuteki" value="健康促進"/> 健康促進</label> <label> <input type="checkbox" name="entry.1018408968" id="mokuteki" value="釣り"/> 釣り</label> <label> <input type="checkbox" name="entry.1018408968" id="mokuteki" value="イベント参加"/> イベント</label> 参加 <label> <input type="checkbox" name="entry.1018408968" id="mokuteki" value="イベント参加"/> イベント</label> 参加 <label> <input type="checkbox" name="entry.1018408968" id="mokuteki" value="宿泊/キャンプ"/> 宿泊/キャンプ</label> <label> <input type="checkbox" name="entry.1018408968" id="mokuteki" value="収穫体験"/> 収穫体験</label> </dd> </dl> <dl class="enquete"> <dt>Q2・何名でお越しくださいましたか?</dt> <dd> <select name="entry.1658666650" id="peoplenum"> <option class="option_error">ご選択ください</option> <option>1名</option> <option>2名</option> <option>3名</option> <option>4名</option> <option>5名</option> <option>6名</option> <option>7名</option> <option>8名</option> <option>9名</option> <option>10名</option> <option>11名以上</option> </select> <p> <label id="message11"></label> </p> </dd> </dl> <dl class="enquete"> <dt>Q3・どなたとお越しくださいましたか?</dt> <dd> <label> <input type="checkbox" name="entry.397320236" id="people" value="家族"/> 家族</label> <label> <input type="checkbox" name="entry.397320236" id="people" value="友人"/> 友人</label> <label> <input type="checkbox" name="entry.397320236" id="people" value="グループ(会社や地域等)"/> グループ(会社や地域等)</label> <label> <input type="checkbox" name="entry.397320236" id="people" value="1人"/> 1人</label> <label> <input type="checkbox" name="entry.397320236" id="people" value="その他"/> その他</label> <p> <label id="message12"></label> </p> </dd> </dl> <dl class="enquete"> <dt>Q4・滞在時間を教えてください。</dt> <dd> <select name="entry.1050850737" id="time"> <option class="option_error">ご選択ください</option> <option>2時間</option> <option>4時間</option> <option>6時間</option> <option>8時間</option> </select> <p> <label id="message13"></label> </p> </dd> </dl> ご教示いただけますと幸いです。宜しくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問