Diskuze: Více než jeden dropdown v jedné funkci?
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 14 zpráv z 14.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj, toto by mohlo fungovať:
var buttons = document.getElementsByClassName("button");
for(var i = 0; i<buttons.length; i++){
buttons[i].addEventListener("click", function(){
buttons[i].classList.toggle("show");
})
}
S tým, že to máš celé v javascripte a nemáš funkciu v HTML.
Teraz som si uvedomil, že som to zle napísal, ale princíp je podobný.
Ak by ti to nešlo, tak napíš a ukážem ti to konkrétne na tvojom príklade
Díky, samozřejmě sem to mezitím celý přepsal, ale ten princip by měl fungovat i v jQuery, ne?
Uvědomil jsem si totiž, že nechci dropdown, ale colapsible div, takže jsem použil trošku jinou funkci
<div class="expandContent">
<a href="#">Click Here to Display More Content</a>
</div>
<div class="showMe" style="display:none">
This content was hidden, but now shows up
</div>
<div class="expandContent1">
<a href="#">Click Here to Display More Content</a>
</div>
<div class="showMe1" style="display:none">
This content was hidden, but now shows up
</div>
<script>
$('.expandContent').click(function(){
$('.showMe').toggle();
});
$('.expandContent1').click(function(){
$('.showMe1').toggle();
});
</script>
Ale myslím, že ten způsob bude uplně stejný jako od tebe
Vieš čo, určite sa to bude dať aj v jQuery dosiahnuť a dosť možné, že aj kratším zápisom.
Ak by si chcel použiť jQuery len kvôli tomuto, tak to je dosť "overkill", ono celkovo podľa mňa je iná doba a tak ako jQuery niekedy bolo super, teraz už je vo veľa prípadoch zbytočné IMHO
Něco takovýhleho?
<script language="javascript">
function toggle() {
var ele = document.getElementById("toggleText");
var text = document.getElementById("displayText");
if(ele.style.display == "block") {
ele.style.display = "none";
text.innerHTML = "show";
}
else {
ele.style.display = "block";
text.innerHTML = "hide";
}
}
</script>
<a id="displayText" href="javascript:toggle();">show</a> <== click Here
<div id="toggleText" style="display: none"><h1>peek-a-boo</h1></div>
Ale moc tomu nerozumím...
Takže určitě tak docela s tím uplně nesouhlasím a nerozumím :-/
jasný, mužu to i celé otočit a nic se neděje, zkusím do toho implementovat tu tvojí radu s vícero divy.
Mužu poprosit o sloučení příspěvků? Nemam prava na to :-/
Ahoj, tak som to teraz v rýchlosti napísal, ako by to šlo, je to jedna z možností:
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Dropdown example</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<button id="btn_1" class="btn">Button 1</button>
<div id="drop_1" class="drop"></div>
<button id="btn_2" class="btn">Button 2</button>
<div id="drop_2" class="drop"></div>
<script src="index.js"></script>
</body>
</html>
CSS (style.css)
.btn{
display: block;
margin-bottom: 5px;
}
.drop{
height: 100px;
background: coral;
margin-bottom: 15px;
}
.displayNone{
display: none;
}
JavaScript (index.js)
let buttons = document.getElementsByClassName("btn");
for(let i = 0; i<buttons.length; i++){
buttons[i].addEventListener("click", function(){
let div = document.getElementById("drop_"+(i+1));
div.classList.toggle("displayNone");
})
}
Mne to funguje bez problémov, tak sa na to pozri.
Poznámka:
Takže,
Otázka - Jak zjistím, že klikám zrovna na ten button, na který klikám a má se otevřít zrovna ten daný drop_X
Prosím o vysvětlení
Přepsaný CSS tak, aby fungovalo otevíralo po načtení, místo zavírání:
.btn{
display: block;
margin-bottom: 5px;
}
.drop{
display: none;
height: 100px;
background: coral;
margin-bottom: 15px;
}
.displayNone{
display: block;
}
Když už autor používá jQuery, tak jQuery. Nepřipadá mi zbytečné,
záleží, jak moc z něj použiješ a jak moc ti usnadní práci. Napadá mě
jednoduché řešení, mělo by snad fungovat.
Píšu z hlavy, snad bez chyb, ale principiálně by to mělo být
správně.
$('.expandContent').on('click', function(){
$(this).next().toggle()
})
Pomocí $(this) získáš jQuery objekt toho elementu, který spustil funkci. Funkce next() vrací jQuery objekt následujícího elementu v DOM.
AHoj,
Děkuju, ale já už to mám komplet hotové v tom Javascriptu a předělavat to znovu nebudu, začínám to už stylovat...jen jsem trošku ztracený, viz ten muj dotaz výše. Jde o to, že sice nechci vymýšlet kolo, ale tomu, co od někud okopíruju, chci aspon rozumět
Ahoj, súhlasím s tým, že ak jQuery už používaš na danom projekte, tak prečo to nevyužiť, ale ak to je jediná vec, ktorú chceš dosiahnuť, tak zbytočne to tam ťahať.
Čo sa týka nejakého dlhodobejšieho výhľadu tak mi príde, že dnes je obrovský "hipe" ohľadom Javascriptu, pomaly týždenne vychádzajú nové frameworky, javascript už beží aj na backende (node.js + databáza napr. MongoDB), o frontende ani nehovorím (react, angular, vue, ionic, ember,...), dokonca sa už tvoria aj mobilné aplikácie v javascripte (napr. react native), to sú veci, ktoré pred pár rokmi boli nemysliteľné. Nedovolím si predpovedať, ako to bude za pár rokov, ale kto vie a práve preto IMHO je dobré sa naučiť ten javascript.
Nemám absolútne nič proti php ani iným akýmkoľvek jazykom, len chcem poukázať, že sila javascriptu rastie
PS: na začiatku vlákna je ten kód/problém/otázka v javascripte, jQuery sa objavilo až v priebehu
Zobrazeno 14 zpráv z 14.