Dag: einfacher Button

Beitrag lesen

Das entsprechende UI-Element für zwei Zustände (aus/an, frei/belegt etc.) ist eine Checkbox:

Wenn Du nur 2 Zustände hast, mag das gehen. Letztendlich haben wir jedoch eine programmiertechnische Aufgabe und die würde ich nicht vom Vorhandensein von HTML-Elementen abhängig machen (Trennung von Semantik und Geschäftslogik). Zum Abstahieren weiterer Zustände habe ich meinen Ansatz mal erweitert. Wobei das Element was geklickt werden soll, nicht unbedingt ein <button> sein muss. Es sind beliebig viele Zustände möglich, die bei jedem Klick in einer vorgegebenen Reihenfolge eingestellt werden (round robin). Die Aufgabe für 2 Zustände ist somit nur ein Spezialfall.

Schönen Sonntag

<button onClick="ff()" id="button" style="padding:0.5em; width:2in; font-weight:bold">...</button>

<script>
function ff(nr){
    // declarations
    if(this.state == null){
        this.state = [];
        this.state[0] = { bgcolor: 'red',    text: 'Occupied',    color: 'white' };
        this.state[1] = { bgcolor: 'yellow', text: 'DAMAGED',     color: 'black' };
        this.state[2] = { bgcolor: 'green',  text: 'Free',        color: 'white' };
        this.state[3] = { bgcolor: 'blue',   text: 'nobody knows', color: 'gold' };
        this.state[4] = { bgcolor: 'white',   text: 'Closed',     color: 'navy' };
        console.log('initialize, done...');
    }

    // initialize
    if( this.stnr == null ){
        this.stnr = nr != null ? nr : 0;
        return apply( this.state[this.stnr]  );
    }

    // on each click
    this.stnr++;
    if( this.stnr > this.state.length - 1 ) this.stnr = 0;
    return apply( this.state[this.stnr]  );
}

function apply(state){
    document.getElementById('button').innerHTML             = state.text;
    document.getElementById('button').style.backgroundColor = state.bgcolor;
    document.getElementById('button').style.color           = state.color;
}

window.onload = function(){
    ff(3);
};

</script>