html - 如何使具有相同值的单选按钮可重复使用?
问题描述
我是 Vue 的初学者,边做边学。我能够使一个复选框可重用,但单选按钮却得到了一些奇怪的结果。我有数组格式的数据ProgramDesign.vue
:
data() {
return {
strategies: [
"Not Important",
"Slightly Important",
"Moderately Important",
"Very Important",
"Extremely Important",
],
};
},
这些选项在每个问题上都会重复出现。我为收音机制作了一个单独的组件,如下所示:
<template>
<div>
<span v-for="strategy in groups" :key="strategy">
<input :id="strategy" class="radio-style" name="strategy" type="radio" />
<label :for="strategy" class="radio-style-3-label">{{strategy}}</label>
</span>
</div>
</template>
<script>
export default {
props: {
groups: Array,
},
};
</script>
这是它的使用方式ProgramDesign.vue
:
<p>first question goes here ?</p>
<RadioButton :groups="strategies" />
<div class="line"></div>
<p>second question goes here ?</p>
<RadioButton :groups="strategies" />
我能够获得可重用的输出,但是当我单击第二个问题的单选按钮时,第一个问题的按钮被选中。我怎样才能解决这个问题?
解决方案
问题是input
组件实例之间的 ID 和名称不是唯一的,这可以在您的两个RadioButton
组件的渲染中看到(为简洁起见):
<!-- RadioButton 1 -->
<div>
<span>
<input id="Not Important" name="strategy" type="radio">
<label for="Not Important">Not Important</label>
</span>
</div>
<!-- RadioButton 2 -->
<div>
<span>
<input id="Not Important"❌ name="strategy"❌ type="radio">
<label for="Not Important">Not Important</label>
</span>
</div>
每个都通过匹配和属性label
链接到一个,这样单击会导致链接的单选更改值。当存在多个具有相同标识符的 s 时,浏览器会将 s 链接到第一个匹配的 s ,从而导致您观察到的行为。input
for
id
label
input
input
label
input
组(实例)之间的name
也必须是唯一的,因为浏览器会创建具有匹配名称RadioButton
的 s 单选组。input
解决方案
或者, a label
andinput
可以通过将 放在input
内部来链接label
,解决id
/for
重复(并提高可读性):
<label>
<input name="strategy" type="radio">
Not Important
</label>
解决重复name
s 的一种方法是将名称基于每个实例递增的计数器:
<template>
<div>
<label v-for="strategy in groups" :key="strategy">
<input :name="'strategy' + groupId" type="radio">
{{strategy}}
</label>
</div>
</template>
<script>
let groupId = 0
export default {
props: {
groups: Array
},
data() {
return {
groupId: groupId++
}
}
}
</script>
推荐阅读
- api - 用于更新一对一关系的 API 端点
- python - 类型错误:& 不支持的操作数类型:“列表”和“列表”但代码在我的 Jupyter Notebook 中有效
- selenium - 如何为执行相同测试方法的每个测试用例动态使用@Description(在诱惑报告中)
- android - Android Worker 有时不发送通知
- json - 如何删除 json 中的 \n、\r、\t
- sql - 具有(可避免的)多个 nm 关系的数据库?
- mysql - 通过 GraphQL 获取数据
- javascript - 验证注册字段奇怪的问题
- javascript - jquery通过滚动控制动画
- excel - 在所有工作表中只保留一个范围 - VBA