2017-05-20 1 views
1

Ich muss eine Funktion schreiben, die eine Zeichenfolge abhängig von einem div geklickt zurückgibt.Rückgabe verschiedener Werte abhängig von div geklickt

<div id="footer"> 
<table> 
    <tr> 
<td><div id="selectpeg1" onclick="selectPeg()"></div></td> 
<td><div id="selectpeg2" onclick="selectPeg()"></div></td> 
<td><div id="selectpeg3" onclick="selectPeg()"></div></td> 
<td><div id="selectpeg4" onclick="selectPeg()"></div></td> 
    </tr> 
</table> 

Die selectPeg() Funktion entweder eine Zeichenfolge oder ein "Hintergrund" Parameter in der CSS-Datei (auch als String) befindet zurückzukehren. Also, wenn ich auf einem ersten Pflock klicken, kann die Funktion zurückgeben „blau“, wenn ich den zweiten peg klicken Sie auf die Funktion „rot“ liefert und so weiter ...

CSS:

#selectpeg1 { 
width: 50px; 
height: 50px; 
background: yellow; 
-moz-border-radius: 25px; 
-webkit-border-radius: 25px; 
border-radius: 30px; 
border-style: solid; 

}

+0

kehrt zu wo? Was soll mit dem Rückgabewert geschehen? Soll der zurückgegebene Wert in der Konsole protokolliert werden? Oder sollte eine globale Variable den zurückgegebenen Wert erhalten?Alternativ kann der Rückgabewert von einem Rückruf verarbeitet werden. Was also willst du mit dem Wert tun, den die Funktion zurückgibt? –

+0

Ich brauche nur eine Rückkehrfunktion. Dann werde ich die Farbe eines anderen Divs ändern, abhängig von einem in dieser Fußzeile angeklickten div :) – szubansky

Antwort

1

wenn Sie Javascript und nicht JQuery verwenden möchten, dann müssen Sie die folgende Änderung vornehmen.

  1. diesen Pass in dem Funktionsaufruf in dem HTML-Code:

    Onclick = "selectPeg (this)"

  2. in der Java-Script-Funktion ein Funktionsargument hinzu:

    Funktion selectPeg (Element)

als Sie können einfach Daten aus dem Element abrufen variabel.

function selectPeg(element) { 

    var id = element.id 
    var backgroud = element.style.background 
    var color = element.style.color 

    // do anything you want to do 
} 
+0

Hey, das ist sehr nützlich, aber ich habe Konsole Protokoll hinzugefügt und es scheint nur den Wert der ID zu drucken. console.log (color) und console.log (background) geben einen leeren Vers in der Konsole aus – szubansky

+0

Wenn element.style nicht funktioniert, können Sie 'var computedstyle = window.getComputedStyle (element, null);' versuchen, um alle zu erhalten der auf das Element angewendete Stil Dann mach einfach computertyle.background und computedstyle, color. – sam23

+0

Wie bekomme ich eine Hintergrundfarbe als String daraus? Es gibt eine Liste mit nummerierten Eigenschaften des Stils – szubansky

2

Beispiel 1: https://jsfiddle.net/sheriffderek/nLfvrey7/

Sie 'Daten' verwenden können Attribute ... sie kann alles sein ... data-bananas='2' oder alles, was Sie wollen.

<ul class="thing-list"> 
    <li class="thing" data-info='one'>one</li> 
    <li class="thing" data-info='two'>two</li> 
    <li class="thing" data-info='three'>three</li> 
</ul> 


JavaScript .. mit einigen jQuery

var $thing = $('.thing'); // cache node you'll use early 

function getInfo(target) { // function that gets info from a given target 
    var info = $(target).data('info'); // check target for data-info 
    alert(info); // do something with that info 
} 

$thing.on('click', function() { // attach click event listener 
    getInfo(this); // run function where the target is 'this' - the thing that got clicked... 
}); 

Sie können dies sicherlich schreiben, ohne jQuery: http://youmightnotneedjquery.com/

Aber der Schlüssel hier ist konzeptuell - so, ich bin schreibe einfach, was am schnellsten und am besten lesbar ist. In den meisten Fällen - versuchen, jQuery zu überspringen, ist nur die aktuelle Paket-Mentalität und nicht wirklich mit viel Grund in vielen Fällen.

hier ist ein vollständiges Beispiel mit den Farben für Spaß zu ändern:

Beispiel 2: https://jsfiddle.net/sheriffderek/dm4pofuz/

+0

kann es ohne jquery gemacht werden? – szubansky

+0

Ja. jQuery ist nur eine Bibliothek von JavaScript-Methoden, die diese einfacher und lesbarer machen und mit browserübergreifenden Problemen umgehen. Alles, was Sie mit jQuery machen können, kann mit Standard-JavaScript geschrieben werden - es ist nur mehr Arbeit und die API ist nicht so angenehm zu arbeiten. – sheriffderek

+0

ja, aber das ist nicht meine Idee Kumpel. das sind die Voraussetzungen für meine Projekte – szubansky

1

Kombination data-attributes mit CSS variables für eine saubere Lösung bietet:

function onSelectorClick(event) { 
 
    console.log(this.dataset.color); // TODO: do something with color 
 
} 
 

 
document.querySelectorAll(".selector").forEach(element => { 
 
    element.style.setProperty("--color", element.dataset.color); 
 
    element.addEventListener("click", onSelectorClick); 
 
});
.selector { 
 
    width: 50px; 
 
    height: 50px; 
 
    border-style: solid; 
 
    border-radius: 30px; 
 
    background-color: var(--color, white); 
 
}
<table> 
 
    <tr> 
 
    <td><div class="selector" data-color="red"></div></td> 
 
    <td><div class="selector" data-color="blue"></div></td> 
 
    <td><div class="selector" data-color="green"></div></td> 
 
    <td><div class="selector" data-color="yellow"></div></td> 
 
    </tr> 
 
</table>

Verwandte Themen