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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Q&A

解決済

1回答

665閲覧

Vue.js 配列にpushされていない

mikeko0901

総合スコア227

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

0グッド

0クリップ

投稿2022/03/03 04:06

Vue.js + php(フレームワークの使用なし)でフォームの作成をしています。
フォームのバリデーションでVue.jsを使用していまして、
内容の不備があった場合にerrors配列にエラーメッセージを入れて、v-forで表示しています。

フォームの2つのページがありまして同じような作りをしているのですが、
1つではerrors配列にエラーメッセージがpushされていないようで、メッセージを画面に表示できません…

アドバイスいただけますと幸いです。

※Vue.jsはCDNで読み込んでいます。

うまくエラーメッセージが表示できているページ

order.php

<body> <div id="app" class="footer_fixed"> <div class="container2"> <div> <div> 以下フォームに必要事項をご入力ください。 <br/>(必須)の項目は必ず入力してください。 </div> <div class="card"> <form action="select_payment" method="POST" id="order_form" class="h-adr" @submit="regist"> <input type="hidden" class="p-country-name" value="Japan"> <div class="form_area"> <div class="form_column"> <label class="form_label">法人名<span class="required">必須</span></label> <div class="form_input"> <input type="text" class="form_parts" name="company_name" v-model="company_name" maxlength="60"> </div> </div> <div class="form_column"> <label class="form_label">ご担当者様お名前<span class="required">必須</span></label></label> <div class="form_input"> <input type="text" class="form_parts" name="tantou_name" v-model="tantou_name" maxlength="80"> </div> </div> </div> <div class="error" id="result"> <ul class="" role="alert"> <li class="ml-4" v-for="error in errors">{{ error }}</li> </ul> </div> <div id="form_submit"> <p id="form_has_error"></p> <input type="submit" class="center_button" value="送信する"> </div> </form> </div> </div> </div> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.min.js"></script> <script> new Vue({ el: '#app', data: { errors: [], company_name: '', tantou_name: '', }, mounted() { }, computed: { }, methods: { regist: function(e) { //フォームのバリデーション this.errors = []; if(this.company_name == "") { this.errors.push("法人名をご記入ください。"); console.log(this.errors); } if(this.tantou_name == "") { this.errors.push("ご担当者様お名前をご記入ください。"); } //バリデーションOKの時 if(this.errors.length >= 1) { e.preventDefault(); } } } }); </script> </body>

errors配列のconsole.logの結果
イメージ説明

配列のlengthも1になっており、メッセージも格納されています。

表示できていないページ

select.php

<body> <div id="app"> <div class="container2"> <div> <div class="card"> <div> <label class="form-check-label"> <input class="form-check-input" type="radio" name="payment_method" v-model="payment_method" value="<?php print(PAYMENT_CARD); ?>"> クレジットカード </label> <div v-if="payment_method == '<?php print(PAYMENT_CARD); ?>'"> カード情報をご入力後、送信ボタンを押してください。 <div> <div class="mt_small"> <label class="">クレジットカード番号<span class="required">必須</span></label></label> <div class="form_input form_select"> <input type="text" class="form_parts" name="card_number" placeholder="例)1111222233334444" maxlength="16" v-model="card_number"> </div> </div> <div class="mt_small"> <label class="">有効期限<span class="required">必須</span></label></label> <div class="form_input form_select"> <input type="text" class="form_parts" name="card_expire" placeholder="例)YYMM" maxlength="5" v-model="card_expire"> </div> </div> <div class="mt_small"> <label class="">セキュリティコード<span class="required">必須</span></label></label> <div class="form_input form_select"> <input type="text" class="form_parts" name="security_code" placeholder="例)123" maxlength="4" v-model="security_code"> </div> </div> <div class="mt_small"> <p id="form_has_error"></p> <button class="left_button" v-show="bf_regist" @click="regist_card">お支払</button> </div> </div> </div> <div class="error" id="result"> <ul class="" role="alert"> <li class="ml-4" v-for="error in errors">{{ error }}</li> </ul> </div> </div> </div> </div> </div> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.min.js"></script> <script> new Vue({ el: '#app', data: { errors: [], id: '<?php print($id); ?>', company_name: '<?php print($company_name); ?>', tantou_name: '<?php print($tantou_name); ?>', payment_method: '', bf_regist: true, card_number: '', card_expire: '', security_code: '', }, watch: { }, mounted() { }, computed: { }, methods: { regist_card: function() { //【クレジットカード払い】 //カード情報のバリデーション this.errors = []; if(this.card_number == "") { this.errors.push("クレジットカード番号をご記入ください"); console.log(this.errors); } if(this.errors.length = 0) { this.bf_regist = false; //ボタンを隠す //APIキーの取得 決済の処理省略 } }, } }); </script> </body>

errors配列のconsole.logの結果
イメージ説明

…lengthが0になっているので、errors配列にメッセージが格納されていなさそうです。
valueの中身も空っぽく…

ご教示いただけますと幸いです。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

自己解決

if(this.errors.length = 0) {
で、誤って=が1つでした…

投稿2022/03/03 04:20

mikeko0901

総合スコア227

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問