简体   繁体   中英

Counter-Increment Not Working Dynamically?

Is it possible to dynamically change the counter-increment number each time a new subject line is generated, as seen below?

The counter-increment number is not changing when generating a new subject line dynamically?

反增量不起作用的例子

If a new fiddle could please be provided, it would be very much appreciated, as I am still new to coding.

Fiddle

Thank You!

HTML:

<button class="button" data-bind="click: addClass">Add a New Class</button>
<button class="button">
Apply
</button>
<hr>

<ul align="center" data-bind="foreach: classes">
    <li>
        <label class="number">Subject:</label><input type="text" data-bind="value: title" placeholder="E.g: English"/>
        <select disabled data-bind="value: credits">
        <option  selected data-bind="value: credits">1</option>
        </select>
        <label>Grade:</label>
        <input type="text" data-bind="value: letterGrade" placeholder="E.g: A+"/>
        <br>
        <br>
    </li>
</ul>



<hr />

<br>
<h4>
Your GPA is: <b><span data-bind="text: totalGPA"></span></b>
</h4>
<br>
<h4>
Final Grade: <span data-bind="text: totalGrade"></span>
</h4>

CSS:

@import url(http://fonts.googleapis.com/css?family=Open+Sans:400,700);
@import url(http://fonts.googleapis.com/css?family=Inconsolata:400);
* { text-rendering: optimizelegibility;}
body, input, textarea, select, button { font-family: 'Open Sans', sans-serif; }
pre { font-family: 'Inconsolata', monospace; }

span {font-size: 18px;}


h1 {font-size: 25px;}



.number {
    counter-reset: subsection;
}

.number:after {
    counter-increment: section;
    content: " " counter(section) ". ";
}

JQuery:

var gradeMapping = {
        'A+': 15,
        'A': 14,
        'A-': 13,
        'B+': 12,
        'B': 11,
        'B-': 10,
        'C+': 9,
        'C': 8,
        'C-': 7,
        'D+': 6,
        'D': 5,
        'D-': 4,
        'E+': 3,
        'E': 2,
        'E-': 1
    }
function Class(title, credits, letterGrade) {
    var self = this;
    self.title = ko.observable(title);
    self.credits = ko.observable(credits);
    self.letterGrade = ko.observable(letterGrade);
    self.gpa = ko.computed(function() {
        return gradeMapping[self.letterGrade()];
    });
}

function GpaCalcViewModel() {
    var self = this;
    self.classes = ko.observableArray();
    self.totalGPA = ko.computed(function() {
        var totalWeightedGPA = 0,
            totalCredits = 0;
        $.each(self.classes(), function() {
            totalWeightedGPA += (this.gpa() * this.credits());
            totalCredits += (this.credits() * 1);
        })
        return totalWeightedGPA / totalCredits;
    });
    self.totalGrade = ko.computed(function() {
        var totalWeightedGPA = 0,
            totalCredits = 0;
        var gradeLetter = null;
        $.each(self.classes(), function() {
            totalWeightedGPA += (this.gpa() * this.credits());
            totalCredits += (this.credits() * 1);
        });
        $.each(gradeMapping, function(letter, number) {
                if(number == Math.round(totalWeightedGPA / totalCredits)){
                gradeLetter = letter;
            }
        })
        return gradeLetter;
    });
    self.addClass = function() {
        self.classes.push(new Class());
    }
};
var viewModel = new GpaCalcViewModel();
ko.applyBindings(viewModel);

Your problem has nothing to do with Knockout but with CSS counters .

You need to reset your section counter first but you have to do it on the "container" level:

.list {
    counter-reset: section;
}

.number:after {
    counter-increment: section;
    content: " " counter(section) ". ";
}

And add the "list" class to your ul :

<ul align="center" class="list" data-bind="foreach: classes">

Demo http://jsfiddle.net/gqjgko04/

A more Knocout solution would be to use the $index to generate your label, something like:

<label data-bind="text: 'Subject: ' + ($index() + 1) + '.'"></label>

Demo http://jsfiddle.net/gqjgko04/1/ .

Or using the container less syntax to remove the string concatenation:

<label>Subject: <!-- ko text: $index() + 1 --><!-- /ko -->. </label>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM