teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2020/05/16 16:23

投稿

rubytomato
rubytomato

スコア1752

answer CHANGED
@@ -120,9 +120,8 @@
120
120
  this.radioValue = e.target.value;
121
121
  if (this.checkValue) {
122
122
  this.message = "変更できません";
123
- const vm = this;
124
123
  this.$nextTick(function() {
125
- vm.radioValue = "one";
124
+ this.radioValue = "one";
126
125
  });
127
126
  }
128
127
  }
@@ -139,4 +138,24 @@
139
138
  }
140
139
  };
141
140
  </script>
141
+ ```
142
+
143
+ **追記 (2020/05/17)**
144
+
145
+ 上記はasync/awaitで下記のように書き直すことができます。
146
+
147
+ ```
148
+ methods: {
149
+ updatedRadio: async function(e) {
150
+ this.radioValue = e.target.value;
151
+
152
+ // DOM更新の完了を待つ
153
+ await this.$nextTick();
154
+
155
+ if (this.checkValue) {
156
+ this.message = "変更できません";
157
+ this.radioValue = "one";
158
+ }
159
+ }
160
+ },
142
161
  ```

1

修正

2020/05/16 16:23

投稿

rubytomato
rubytomato

スコア1752

answer CHANGED
@@ -67,4 +67,76 @@
67
67
  }
68
68
  };
69
69
  </script>
70
+ ```
71
+
72
+ **修正**
73
+
74
+ 以下のように修正しました。これでチェックボックスがonのときは1番目のラジオボタンにチェックが強制的に付くようになります。
75
+
76
+ ```
77
+ <input type="checkbox" v-model="checkValue" />
78
+ <br />
79
+ <input
80
+ type="radio"
81
+ id="one"
82
+ value="one"
83
+ :checked="radioValue === 'one'"
84
+ @change="updatedRadio"
85
+ />
86
+ <label for="one">One</label>
87
+ <br />
88
+ <input
89
+ type="radio"
90
+ id="two"
91
+ value="two"
92
+ :checked="radioValue === 'two'"
93
+ @change="updatedRadio"
94
+ />
95
+ <label for="two">Two</label>
96
+ <br />
97
+ <input
98
+ type="radio"
99
+ id="three"
100
+ value="three"
101
+ :checked="radioValue === 'three'"
102
+ @change="updatedRadio"
103
+ />
104
+ <label for="three">three</label>
105
+ <div>{{ message }}</div>
106
+ ```
107
+
108
+ ```
109
+ <script>
110
+ export default {
111
+ data() {
112
+ return {
113
+ checkValue: false,
114
+ radioValue: null,
115
+ message: null
116
+ };
117
+ },
118
+ methods: {
119
+ updatedRadio(e) {
120
+ this.radioValue = e.target.value;
121
+ if (this.checkValue) {
122
+ this.message = "変更できません";
123
+ const vm = this;
124
+ this.$nextTick(function() {
125
+ vm.radioValue = "one";
126
+ });
127
+ }
128
+ }
129
+ },
130
+ watch: {
131
+ checkValue(newVal, val) {
132
+ if (newVal) {
133
+ this.radioValue = "one";
134
+ } else {
135
+ this.radioValue = null;
136
+ this.message = "";
137
+ }
138
+ }
139
+ }
140
+ };
141
+ </script>
70
142
  ```