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

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

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

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

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

3610閲覧

Vue.jsでsubmitした時にdataオプションへ値が入らない

ryoooos

総合スコア11

Vue.js

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

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/03/30 12:45

編集2020/03/30 22:06

テンプレートから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("カード情報が不正です") } }) } } })

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

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

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

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

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

guest

回答1

0

ベストアンサー

jsのコンソールというのは、もしかして開発者ツールを指していますか?
もし開発者ツールで確認したいのでしたら

app.number

で確認できます。
appはVueのインスタンスが入っている変数を指しています。

addCardのメソッドの中でconsole.log(this.number)と実行した上でundefinedになるのでしたら↑の話は的外れになってしまいますが、、、

投稿2020/03/30 12:54

ymneet

総合スコア154

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

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

ryoooos

2020/03/30 22:08 編集

ご回答ありがとうございます。 開発者ツールを使用しています。 app.numberでは確認できませんでしたが、addCardメソッド内でconsole.log(this.number)とすると、値は入っていました。 最終的にやりたいことは、双方向データバインディングで代入された値を、cardという変数に代入して、そのcardという変数をPayjp.createTokenというメソッドの引数として渡すことです。 そこで、dataオプションを上記のように変更しました(追記として載せております)。 以上のようなコードにしてもステータスエラー402が返ってきます。 Payjp.createTokenメソッドは、キー、バリューの形式で値を正しく入れれば発動するメソッドです。 これはdataオプションの形式に何か問題があるのでしょうか? ご回答よろしくお願い致します。
ryoooos

2020/03/30 22:28

cardオブジェクトをインスタンスから切り出すことで、うまく値が渡りました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問