Javascript 如果在angularjs ng repeat中单击任何单选按钮,则禁用所有单选按钮
我想在这里做的是,我在表单中有一个ng重复,如果我点击任何一个对应的输入按钮,所有按钮都会被禁用Javascript 如果在angularjs ng repeat中单击任何单选按钮,则禁用所有单选按钮,javascript,angularjs,angularjs-ng-repeat,Javascript,Angularjs,Angularjs Ng Repeat,我想在这里做的是,我在表单中有一个ng重复,如果我点击任何一个对应的输入按钮,所有按钮都会被禁用 <div ng-repeat="question in sinSurCtrl.singleSurvey" ng-show="!$first"> <hr> <p>Q. {{question.questionText}}</p> <form > &l
<div ng-repeat="question in sinSurCtrl.singleSurvey" ng-show="!$first">
<hr>
<p>Q. {{question.questionText}}</p>
<form >
<div ng-repeat=" option in question.questionOptions track by $index">
<label>
<input name="options" type="radio" value="$index" ng-click="sinSurCtrl.questionId=question.questionId; sinSurCtrl.answer=$index+1; sinSurCtrl.createAnswer()" onclick="this.disabled = true">
<span> {{option}} {{$index+1}} {{question.questionId}} </span>
</label>
</div>
</form>
</div>
问题{问题.问题文本}
{{option}{{$index+1}{{{question.questionId}}
这里是风景-
你可以看到,如果我选择了这些选项中的任何一个,它将被禁用,但我试图做的是,如果我尝试了任何一个选项,那么对应于相同问题的选项将被禁用。
比如说-
第三季度。哪个演说家更好?
如果我选择选项(a),那么它会被选中,然后自动禁用选项(a)和(b)
注意-请尝试将解决方案完全保留在angularjs中,或者如果您想使用负担得起的javascript,那么请避免使用像jQuery这样的外部库(我知道在他看来没有人会处理一起使用jQuery和angular的麻烦,但为了示例,我已经包括了它的名称)
在控制器上,创建一个函数,检查给定的问题ID是否已回答,如果已回答,则返回truthy。在输入标记的
ng disabled
中调用该函数:
<input type="radio" ng-disabled="sinSurCtrl.questionHasAnswer(question.questionId)" ... />
在控制器上,创建一个函数,检查给定的问题ID是否已回答,如果已回答,则返回truthy。在输入标记的
ng disabled
中调用该函数:
<input type="radio" ng-disabled="sinSurCtrl.questionHasAnswer(question.questionId)" ... />
建议的解决方案和一些建议的重构… 首先更改
ng click
指令,指向sinSurCtrl
上新的onoption按钮clicked
函数,该函数接受两个参数问题
和索引
(它需要执行它的工作):
在这里,已回答的
问题
对象将其禁用
属性设置为真
。这与前面提到的ng disabled
指令相结合,是禁用选项按钮的原因。建议的解决方案和一些建议的重构…
首先更改ng click
指令,指向sinSurCtrl
上新的onoption按钮clicked
函数,该函数接受两个参数问题
和索引
(它需要执行它的工作):
在这里,已回答的
问题
对象将其禁用
属性设置为真
。这与前面提到的ng disabled
指令相结合,是禁用选项按钮的原因。一旦单击单选按钮,将启动$http POST请求,该请求将直接将用户输入发送到服务器,因此,我没有保存任何类型的记录,因此我无法实现这种功能。但数据绑定是一种有角度的方式。您需要绑定到的数据。即使它是控制器上已回答问题ID的简单数组。另一个想法是:在单击时,在调用createAnswer()
后,在问题对象上设置一个标志question.answered=true
并将您的ng disabled绑定到它。是的,您是对的,我正在维护一系列响应,但直接在服务器端,数组有两个可能的值1或2,如果任何问题有4个选项,那么数组变量的范围可以是1到4,在服务器端,将它们计算为其中的多少个选项。它不是测验应用程序的示例代码,而是调查应用程序的示例代码。正如您在编辑中看到的,我没有问题记录,或者所有内容都由ui路由器应用程序维护。单击单选按钮后,启动$http POST请求,直接将用户输入发送到服务器,因此,我没有保存任何类型的记录,因此我无法实现这种功能。但数据绑定是一种有角度的方式。您需要绑定到的数据。即使它是控制器上已回答问题ID的简单数组。另一个想法是:在单击时,在调用createAnswer()
后,在问题对象上设置一个标志question.answered=true
并将您的ng disabled绑定到它。是的,您是对的,我正在维护一系列响应,但直接在服务器端,数组有两个可能的值1或2,如果任何问题有4个选项,那么数组变量的范围可以是1到4,在服务器端,将它们计算为其中的多少个选项。这不是测验应用程序的示例代码,而是调查应用程序的示例代码。正如您在“编辑”中所看到的,我没有任何问题记录,也没有任何问题记录。所有问题都由ui路由器应用程序维护。只需稍加修改,您的答案就完全符合我的目标。@Samatajshaikh很高兴它对我有所帮助。你还换了什么?我将更新答案以反映变化。答案中没有任何内容,但我根据您的答案编辑了我的函数调用和服务,谢谢您的手势。经过一些小的修改,您的答案完全符合我试图实现的目标。@samartajShaikh很高兴它有所帮助。你还换了什么?我将更新答案以反映更改。答案中没有任何内容,但在我的函数调用和服务中,我根据您的答案编辑了这些内容,谢谢您的手势。
sinSurCtrl.onOptionButtonClicked = onOptionButtonClicked;
function onOptionButtonClicked(question, index){
sinSurCtrl.questionId=question.questionId;
sinSurCtrl.answer=index;
sinSurCtrl.createAnswer();
question.disabled = true; // <--- This is what disables the option buttons
}