テンプレートからsubmitをした時に、Vueインスタンスのdataオプションに値が保持されないことを解決したいです。
v-modelを使用し、inputタグとdataオプションの内部とは紐づけています。
したがって、サブミットするまで、「双方向バインディング」ができていることは確認しています。
jsのコンソールで this.number
のように確認すると、undifinedとなります。
なぜ値が保持されないのでしょうか。
解決法をご存知の方がいらっしゃれば、ご回答よろしくお願い致します。
該当の箇所とは、直接関係ありませんが、このコードはPayjpという決済機能のAPIを使用しております。
全体のコードは以下の通りです。
Vue.jsのコード
js:app/javascripts/hello_vue.js
1import Vue from 'vue/dist/vue.esm' 2 3var app = new Vue({ 4 el: "#app", 5 data () { 6 return { 7 number: "", 8 cvc: "", 9 exp_month: "", 10 exp_year: "", 11 } 12 }, 13 methods: { 14 addCard: function(event) { 15 Payjp.createToken(this.data, (status, response) => { 16 if (status == 200) { 17 this.number = "" 18 this.cvc = "" 19 this.exp_month = "" 20 this.exp_year = "" 21 $("#card_token").append( 22 $('<input type="hidden" name="payjpToken">').val(response.id) 23 ); 24 document.chargeForm.submit() 25 alert("登録が完了しました") 26 } else { 27 alert("カード情報が不正です") 28 } 29 }) 30 } 31 } 32}) 33
テンプレート部分のコード
<div id="app"> <form v-on:submit.prevent method="post" action="/cards/pay" id="charge-form" name="chargeForm" > <div class="form-group col-auto"> <label>カード番号</label> <input type="text" v-model="number" class="number form-control form-control-lg" name="number" id="card_number" maxlength="17" placeholder="カード番号"> </div> <p>{{ number }}</p> <div class="form-group col-auto"> <label for="">CVC</label> <input type="text" v-model="cvc" class="cvc form-control form-control-lg" name="cvc" id="cvc" maxlength="3" placeholder="CVC"> </div> <p>{{ cvc}}</p> <div class="form-group col-auto"> <label for="">有効期限</label> <input type="text" v-model="exp_month" class="exp_month form-control form-control-lg" name="exp_month" id="exp_month" maxlength="2" placeholder="月"> </div> <div class="form-group col-auto"> <input type="text" v-model="exp_year" class="exp_year form-control form-control-lg" name="exp_year" id="exp_year" maxlength="4" placeholder="年"> </div> <div class="card_token"> <button v-on:click="addCard" type="submit" name="button" id="token_submit" class="form-control create-button" >送信する</button> </div> </form> </div>
追記
var app = new Vue({ el: "#app", data: { card: { number: "", cvc: "", exp_month: "", exp_year: "", } }, methods: { addCard: function(event) { Payjp.createToken(this.card, (status, response) => { debugger if (status == 200) { this.number = "" this.cvc = "" this.exp_month = "" this.exp_year = "" $("#card_token").append( $('<input type="hidden" name="payjpToken">').val(response.id) ); document.chargeForm.submit() alert("登録が完了しました") } else { alert("カード情報が不正です") } }) } } })
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/30 22:08 編集
2020/03/30 22:28