Javascript 如果在angularjs ng repeat中单击任何单选按钮,则禁用所有单选按钮

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

我想在这里做的是,我在表单中有一个ng重复,如果我点击任何一个对应的输入按钮,所有按钮都会被禁用

<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
}