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

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

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

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

Vuex

Vuexは、Vue.js アプリケーションのための状態管理ライブラリです。アプリケーション内で使用するコンポーネントのための集中データストアを提供。コンポーネント同士でデータをやり取りし、処理のフローを一貫させたり、データの見通しを良くすることができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

1回答

2706閲覧

vue.jsでラジオボタンのnameに指定された値も取得する方法

weak_man

総合スコア8

Vue.js

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

Vuex

Vuexは、Vue.js アプリケーションのための状態管理ライブラリです。アプリケーション内で使用するコンポーネントのための集中データストアを提供。コンポーネント同士でデータをやり取りし、処理のフローを一貫させたり、データの見通しを良くすることができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2021/08/03 08:32

vue.js3 + Typescriptで以下のようなラジオボタンを実装しています。
(hogeはjsonのデータが入っています。)

vue

1<div v-for="(value, index) in hoge" :key="index"> 2 <ul> 3 <li v-for="item in value.options" :key="item.index"> 4 <label> 5 <input type="radio" required="required" 6 :name="value.numA" 7 :value="item.numB" 8 v-model="result[index]" />{{item.txt}} 9 </label> 10 </li> 11 </ul> 12</div>

画面上は、

設問1
ラジオボタン○
ラジオボタン○
ラジオボタン○
ラジオボタン○

設問2
ラジオボタン○
ラジオボタン○
ラジオボタン○
ラジオボタン○
.
.
.

というようにラジオボタン4つのかたまりが複数並んでいます。
これをそれぞれ選択すると、v-modelのresultには、
["10", "22", "31", "40"]というように値が順番に入ります。

このとき、:valueに設定した値だけでなく、
:nameに設定した値も取得することは可能でしょうか?

最終的には、
value.numAとvalue.numBの値を、
Objectとして、以下のような形式にしたいです。

ts

1{ 2 "hogeHoge":[ 3 {"name":"1","num":"10"}, 4 {"name":"2","num":"10"}, 5 {"name":"3","num":"10"}, 6 {"name":"4","num":"10"} 7 ] 8}

配列をObjectにする方法は別の質問(https://teratail.com/questions/352497)で
教えていただいたのですが、
プロパティを増やす方法がわからず、、、

どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

公式サイトよりrefを用いたらうまくいきました。これは自分がテストに用いたものですが、これと同じ働きをさせれば、divs.valueの中にidの値が代入されるようになり、これがdocument.getElementById('hoge')の戻り値と同じとなります。

あとはdivs.value[idx].nameとすればnameの値を取得できます。

  • refAPIの使用
  • refの定義
  • フォームタグに:refの指定
  • 受け皿となるdivsの定義
  • メソッド内から変数divsを出力する

Usage inside v-for

<template> <div class="home"> <label v-for="(m,idx) in state.ar_mode" :key="idx"> <input type="radio" :id="`id${m.val}`" :name="`name${m.val}`" @click="selMode(m.val,idx)" :ref="(el) =>{if (el) divs[idx] = el }"/>{{m.head}} </label> <p>&nbsp;</p> </div> </template> <script> import { reactive,ref } from 'vue' export default { setup(){ const divs =ref([]) const state = reactive({ mode: '', ar_mode: [ {"head":'電卓',"val":'calc'}, {"head":'写真',"val":'world'}, ], }) const selMode = (sel,idx)=>{ console.log(divs.value[idx].name) let mode = state.mode if(mode !== sel){ mode = sel } state.mode = mode } return{divs,state,selMode} }, }

投稿2021/08/05 06:21

編集2021/08/05 06:38
FKM

総合スコア3647

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

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

weak_man

2021/08/13 01:27

ありがとうございます。助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問