【发布时间】:2019-01-18 09:27:39
【问题描述】:
我遍历一个数组并显示一个单选按钮列表。我正在尝试禁用所有其他无线电输入,但单击后选择的无线电输入除外。我所能做的就是禁用所有收音机或被点击的收音机。
我能够在v-for 循环中动态添加一个类,所以我尝试以相同的方式禁用输入,但一切都被禁用了:
:disabled="{'disabled':answer.answerID == isChecked}"
我也尝试过使用一种方法,但也没有运气:
/* 列出数据 */
"answers":[
{
"answerID": "1",
"answerName": "Blueberries"
},
{
"answerID": "2",
"answerName": "Apples"
},
{
"answerID": "3",
"answerName": "Bananas"
},
{
"answerID": "4",
"answerName": "Pineapple"
},
{
"answerID": "5",
"answerName": "Strawberries"
}
]
/* 组件代码 */
<template>
<input
v-for="(answer, index) in answers"
:key="index"
type="radio"
class="mg-input mg-answer"
ref="mgAnswer"
name="mg-answer"
:value="answer.answerName"
v-model="answerVal"
:disabled="disableAnswer(answers, index)"
:class="{'mg-checked':answer.answerID == isChecked}"
@click="
isChecked = answer.answerID
checkAnswer(answers, index, $event)" />
</template>
<script>
export default {
data: function () {
return {
// Class definer for is checked or not
isChecked: undefined,
// Answer Data Properties
answerVal: '',
checkedAnswerID: '',
checkedAnswerElem: '',
}
},
methods: {
checkAnswer: function (arr, i, event) {
let mgAnswer = this.$refs.mgAnswer
this.checkedAnswerID = arr[i].answerID
this.checkedAnswerElem = mgAnswer[i]
if (mgAnswer[i].answerName !== this.answerVal) {
this.answerVal = ''
}
},
disableAnswer: function (arr, i) {
if (arr[i].answerName !== this.answerVal) {
return true
}
}
}
}
</script>
【问题讨论】:
-
不确定我是否遵循,我正在使用带有数据变量 answerVal 的 v-model,我尝试过使用。
:disabled="!answerVal[index]"这会禁用所有输入,以及类似:disabled="answerVal[index] && isChecked ? true : false"之类的输入,但同样是所有输入或仅单击一次,我需要禁用未单击的输入。 -
当我使用 v-model="[index]" 选择一个输入时,我收到一个错误,无法在未定义、null 或原始值上设置反应属性:,无法使用“in”运算符进行搜索对于“0”在
-
顺便说一句,这不是有问题的用户体验吗?不小心选择了怎么办?
-
如果有人点击单选按钮会怎样。所以他不能点击任何其他,因为都被禁用了