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

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

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

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

Q&A

解決済

2回答

12834閲覧

vueのプルダウンにてキャンセル時に値を元に戻す

haggis

総合スコア7

Vue.js

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

0グッド

0クリップ

投稿2018/08/11 07:35

前提・実現したいこと

Vueにてプルダウンの値を変更する際に、
確認メッセージ表示後、OKの場合変更、キャンセルした場合は元に戻すと言う
処理を作りたいのですが、上手く出来ません。

以下で試しに実施してみたところダメでした。
こちら正しく動作する仕組みか、あるいは実現可能な代替案を
どなたか教えて頂けますでしょうか。

よろしくお願いいたします。

該当のソースコード

vue

1<template> 2 <div> 3 <select v-model="selected" @focus="getPreviousVal"> 4 <option disabled value="">Please select one</option> 5 <option>A</option> 6 <option>B</option> 7 <option>C</option> 8 </select> 9 <div>Selected: {{ selectVal }}</div> 10 </div> 11</template> 12 13<script> 14export default{ 15 data() { 16 return { 17 selectVal:"", 18 previousVal:"" 19 } 20 }, 21 computed:{ 22 selected: { 23 get(){ 24 return this.selectVal 25 }, 26 set(value){ 27 if(window.confirm('変更しますか')){ 28 this.selectVal = value 29 }else{ 30 this.selectVal = this.previousVal 31 } 32 } 33 } 34 }, 35 36 methods: { 37 getPreviousVal: function(){ 38 this.previousVal = this.selectVal 39 } 40 } 41} 42</script> 43

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

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

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

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

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

guest

回答2

0

変更先がDBだったので、変更前に値を変えたくなかったのですが、
アドバイスを基に以下のように直しました。
@focusも消せてスッキリしました、ありがとうございます。

該当のソースコード

vue

1<template> 2 <div> 3 <select v-model="selected"> 4 <option disabled value="">Please select one</option> 5 <option>A</option> 6 <option>B</option> 7 <option>C</option> 8 </select> 9 <div>Selected: {{ selectVal }}</div> 10 </div> 11</template> 12 13<script> 14export default{ 15 data() { 16 return { 17 selectVal:"", 18 tempVal:"" 19 } 20 }, 21 computed:{ 22 selected: { 23 get(){ 24 return this.selectVal || this.tempVal 25 }, 26 set(value){ 27 console.log("prevval:", this.previousVal) 28 this.tempVal = value 29 if(window.confirm('変更しますか')){ 30 this.selectVal = this.tempVal 31 } 32 this.tempVal ="" 33 } 34 } 35 } 36} 37</script> 38

投稿2018/08/20 00:32

haggis

総合スコア7

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

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

0

ベストアンサー

Vueがプルダウンの変更を検知し、selectedValを更新しようとします。
ここでダイアログが表示され、「キャンセル」が選択された場合、previousValを代入していますが、
selectedValの値はまだ変更されていないので、selectedValpreviousValの値は同じです。
そのため、値が変更されていないので、Vueはプルダウンの再描画を行わず、選択肢は元にもどりません。

解決方法としては以下のように、selectedValの値を変更した後、確認ダイアログを表示し、「キャンセル」の場合はpreviousValを代入するように処理を変更すればいいと思います。

javascript

1set(value) { 2 this.selectVal = value; 3 if (!window.confirm("変更しますか")) { 4 this.selectVal = this.previousVal; 5 } 6}

投稿2018/08/12 01:11

d-yosh

総合スコア270

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

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

haggis

2018/08/12 11:54

なるほど、一回状態を変えてしまってから元に戻せば良かったんですね。 ありがとうございした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問