1

I am working on a quiz. However, the reset button does not work in my Quiz. Can someone help me out?

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.7/angular.min.js"></script>
</head>
<body ng-app="myApp" ng-controller="myCtrl"> 
<p>Q1: What is capital of England? </p>
<ul>
	<li><input type="radio" name="q1" value="1" ng-model="quiz.one"> London</li>
	<li><input type="radio" name="q1" value="2" ng-model="quiz.one"> Brisbane</li>
</ul>
<p>Q2: What is capital of Austrailia? </p>
<ul>
	<li><input type="radio" name="q2" value="1" ng-model="quiz.two"> Canberra</li>
	<li><input type="radio" name="q2" value="2" ng-model="quiz.two"> Sydney</li>
</ul>
<button ng-click="show()">Click Me</button>
<button ng-click="reset()">Reset</button>

<script>
//module declaration
var app = angular.module('myApp',[]);

//controller
app.controller('myCtrl',function($scope){
$scope.quiz = {one:"", two:""};
$scope.show = function(){
	alert("Done");
}
$scope.reset = function(){
	angular.forEach($scope.quiz,function(val, key){
		val = "";
		val.checked = false;
	});
}
});

</script> 
</body> 
</html> 

4 Answers 4

1

Please change the reset function like this. That will work.

$scope.reset = function () {
    angular.forEach($scope.quiz, function (val, key) {
        $scope.quiz[key] = "";
    });
}

<html>

<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.7/angular.min.js"></script>
</head>

<body ng-app="myApp" ng-controller="myCtrl">
    <p>Q1: What is capital of England? </p>
    <ul>
        <li>
            <input type="radio" name="q1" ng-value="1" ng-model="quiz.one"> London</li>
        <li>
            <input type="radio" name="q1" ng-value="2" ng-model="quiz.one"> Brisbane</li>
    </ul>
    <p>Q2: What is capital of Austrailia? </p>
    <ul>
        <li>
            <input type="radio" name="q2" ng-value="1" ng-model="quiz.two"> Canberra</li>
        <li>
            <input type="radio" name="q2" ng-value="2" ng-model="quiz.two"> Sydney</li>
    </ul>
    <button ng-click="show()">Click Me</button>
    <button ng-click="reset()">Reset</button>

    <script>
        //module declaration
        var app = angular.module('myApp', []);

        //controller
        app.controller('myCtrl', function ($scope) {
            $scope.quiz = {
                one: "",
                two: ""
            };
            $scope.show = function () {
                alert("Done");
            }
            $scope.reset = function () {
                angular.forEach($scope.quiz, function (val, key) {
                    $scope.quiz[key] = "";
                });
            }
        });
    </script>
</body>

</html>

Sign up to request clarification or add additional context in comments.

1 Comment

$scope.quiz[key] = ""; , See comment below
0

You are looping on $scope.quiz1 instead of $scope.quiz

Comments

0

Try this What is got you are directly trying to delete val but not assigning back to json which should be done in each method

    <html>
    <head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.7/angular.min.js"></script>
    </head>
    <body ng-app="myApp" ng-controller="myCtrl"> 
    <p>Q1: What is capital of England? </p>
    <ul>
    	<li><input type="radio" name="q1" value="1" ng-model="quiz.one"> London</li>
    	<li><input type="radio" name="q1" value="2" ng-model="quiz.one"> Brisbane</li>
    </ul>
    <p>Q2: What is capital of Austrailia? </p>
    <ul>
    	<li><input type="radio" name="q2" value="1" ng-model="quiz.two"> Canberra</li>
    	<li><input type="radio" name="q2" value="2" ng-model="quiz.two"> Sydney</li>
    </ul>
    <button ng-click="show()">Click Me</button>
    <button ng-click="reset()">Reset</button>

    <script>
    //module declaration
    var app = angular.module('myApp',[]);

    //controller
    app.controller('myCtrl',function($scope){
    $scope.quiz = {one:"", two:""};
    $scope.show = function(){
    	alert("Done");
    }
    $scope.reset = function(){
    	angular.forEach($scope.quiz,function(val, key){
    		$scope.quiz[key] = "";

    	});
    }
    });

    </script> 
    </body> 
    </html>

Comments

0

Try using ng-checked you can accomplish this

https://docs.angularjs.org/api/ng/directive/ngChecked

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.