Wie Sie sehen können, werden 3 divs mit JavaScript erstellt, wenn auf die entsprechenden Schaltflächen geklickt wird. Ich übergebe ihre Werte und verwende diese dann, um den Inhalt zu erstellen. Ich bin mir nicht sicher, ob dies der beste Weg ist ... aber trotzdem.

Das Problem ist, dass die divs weiterhin angehängt werden. Ich möchte jeweils nur einen div anzeigen und die aktive div's Schaltfläche deaktivieren. Ich habe gesehen, dass Sie so etwas wie document.querySelector('button[onclick]').disabled = true; verwenden können, bin mir aber nicht sicher, wie es dynamisch funktionieren soll, da es auf false gesetzt werden müsste, sobald auf eine der anderen Schaltflächen geklickt wird.

Hier ist mein JavaScript, das für die Erstellung des Inhalts verantwortlich ist:

function showDiv(name) {
    var selectedButton = name.value;
    var div = document.createElement('div');
    div.id = 'myDiv';
    document.body.appendChild(div);

    if (selectedButton === 'home') {
        div.innerHTML = 'Hi, this is a test for the ' + selectedButton + ' div.';

    } else if (selectedButton === 'about') {
        div.innerHTML = 'Hi, this is a test for the ' + selectedButton + ' div.';

    } else if (selectedButton === 'contact') {
        div.innerHTML = 'Hi, this is a test for the ' + selectedButton + ' div.';
    }
}

Meine JSFiddle: http://jsfiddle.net/wwen39o9/

0
kaoscify 15 Aug. 2015 im 01:51

4 Antworten

Beste Antwort

Ich habe Ihre Geige aktualisiert: http://jsfiddle.net/wwen39o9/3/

Kurz gesagt, fügen Sie dem HTML-Code ein Div hinzu:

<div id="myDiv"></div>

Geben Sie den Schaltflächen eine Klasse navbutton:

Javascript:

function showDiv(me) {
    $('.navbutton').prop('disabled', false);
    $(me).prop('disabled', true);
    $('#myDiv').html('Hi, this is a test for my ' + $(me).val() + ' div.');
}

Reine JS-Version ohne jQuery:

function showDiv(me) {
    var div = document.getElementById('myDiv');
    var buttons = document.getElementsByTagName('button');
    for (var i = 0; i < buttons.length; i++) {
        if (buttons[i].className == 'navbutton')
            buttons[i].disabled = false;   
    }

    me.disabled = true;
    div.innerHTML = 'Test for ' + me.value;
}
1
Tyr 14 Aug. 2015 im 23:11

Verschiedene Möglichkeiten, eine aktive Schaltfläche in einer Gruppe von Schaltflächen festzulegen:

Wenn sie auf einen Wrapper beschränkt sind:

function setActive(selectedButton){
    var parent = selectedButton.parentNode;
    var children = parent.getElementsByTagName('button');
    var child_ct = children.length - 1;
    while (child_ct) {
        children[child_ct].disabled = false;
        child_ct--;
    }

    selectedButton.disabled = true;
}

Oder indem Sie allen eine Klasse wie .nav-btn geben

function setActive(selectedButton) {
    var parent = selectedButton.parentNode;
    var children = parent.getElementsByClassName('nav-btn');
    var child_ct = children.length - 1;
    while (child_ct) {
        children[child_ct].disabled = false;
        child_ct--;
    }

    selectedButton.disabled = true;
}

Ein guter Weg, um div auszutauschen:

Überprüfen Sie, ob div vorhanden ist. Ersetzen Sie den Inhalt, wenn ja, erstellen Sie div, wenn nicht.

function showDiv(content) {
    var div = document.getElementById('the-div');
    if (div) {

       //May be better to remove children, then append content, but...
       div.innerHTML = content
    } else {
       var the_div = document.createElement('div');
       the_div.id = 'the-div';
       the_div.innerHTML = content;
       document.appendChild(the_div);
    }

}

So:

function handleClick() {
   setActive(this);
   if (this.name === 'home') {
      showDiv('Information about being home');
   }

}

<button onclick="handleClick">
1
Cmaddux 14 Aug. 2015 im 23:40

Die Append-Methode sollte nur aufgerufen werden, wenn wir keine gefunden haben.

Etwas wie

function showDiv(name) {
    var selectedButton = name.value;
    var div = document.getElementById('myDiv');
    if(!div) {
      document.createElement('div');
      div.id = 'myDiv';
      document.body.appendChild(div);
}
0
Tony Z 14 Aug. 2015 im 23:00

Wir können die Anzahl der div Elemente auf der Seite überprüfen

Oder warum nicht wie folgt? Am Anfang haben wir ein leeres div mit id="myDiv" und dann ändern wir nur den Inhalt mit JavaScript. Schauen Sie sich das JSFiddle-Beispiel an.

HTML

<button value="home" onclick="showDiv(this);">Home</button>
<button value="about" onclick="showDiv(this);">About</button>
<button value="contact" onclick="showDiv(this);">Contact</button>

<!-- create an empty div -->
<div id="myDiv"></div>

JavaScript

function showDiv(name) {
    var selectedButton = name.value;
    var div = document.getElementById('myDiv');

    if (selectedButton === 'home') {
        div.innerHTML = 'Hi, this is a test for the ' + selectedButton + ' div.';

    } else if (selectedButton === 'about') {
        div.innerHTML = 'Hi, this is a test for the ' + selectedButton + ' div.';

    } else if (selectedButton === 'contact') {
        div.innerHTML = 'Hi, this is a test for the ' + selectedButton + ' div.';
    }
}
0
lingo 14 Aug. 2015 im 23:07