Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[jQuery] Meerdere progressbars initialiseren

Pagina: 1
Acties:

  • dxta
  • Registratie: Maart 2002
  • Niet online
Ik heb een overzichtspagina waarop meerdere jQuery UI progressbars moeten komen, elk met een andere value. De hoeveelheid progressbars is dynamisch.

Op dit moment worden de <div>'s voor de progressbars als volgt gedefinieerd:

HTML:
1
2
3
{foreach from=$list key=id item=i}
<div class="progressbar"><div class="progress-label"><span>{$i.value}</span>%</div></div>
{/foreach}


De bijbehorende jQuery code voor het initaliseren van een afzonderlijke progressbar is natuurlijk
JavaScript:
1
$( "#progressbar" ).progressbar({value: 37});


Mijn vraag is als volgt: hoe krijg ik het volgende voor elkaar:
HTML:
1
2
3
4
5
6
<div id="progressbar1"><div class="progress-label"><span>3</span>%</div></div>
$( "#progressbar1").progressbar({value: 3});
<div id="progressbar2"><div class="progress-label"><span>10</span>%</div></div>
$( "#progressbar2").progressbar({value: 10});
<div id="progressbar3"><div class="progress-label"><span>15</span>%</div></div>
$( "#progressbar3").progressbar({value: 15});

zonder voor elke progressbar een ID aan te maken en dit later weer te moeten terugzoeken?

Omelette du fromage!


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
JavaScript:
1
2
3
4
5
$(".progressbar:nth-of-type(1)").progressbar({value: 13});
$(".progressbar:nth-of-type(2)").progressbar({value: 37});
$(".progressbar:nth-of-type(3)").progressbar({value: 99});
$(".progressbar:nth-of-type(4)").progressbar({value: 1});
$(".progressbar:nth-of-type(5)").progressbar({value: 50});

:?

http://jsfiddle.net/RobIII/XQFVe/

[ Voor 7% gewijzigd door RobIII op 02-05-2014 14:52 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

RobIII schreef op vrijdag 02 mei 2014 @ 14:51:
JavaScript:
1
2
3
4
5
$(".progressbar:nth-of-type(1)").progressbar({value: 13});
$(".progressbar:nth-of-type(2)").progressbar({value: 37});
$(".progressbar:nth-of-type(3)").progressbar({value: 99});
$(".progressbar:nth-of-type(4)").progressbar({value: 1});
$(".progressbar:nth-of-type(5)").progressbar({value: 50});

:?

http://jsfiddle.net/RobIII/XQFVe/
Kan je niet beter de value op een element zetten met
data-value
?

Going for adventure, lots of sun and a convertible! | GMT-8


  • Yoram
  • Registratie: Augustus 2004
  • Laatst online: 05-08 14:22
Weet niet of het de juiste manier is, maar voor mij werkt het altijd. Ik doe zoiets door de class voor elke progressbar het zelfde te houden en het via het ID elke bar apart aan te sturen zegmaar.
HTML:
1
 <div class="progressbar" id="progressbar1">enz..</div>

Als je alles wilt initalizeren doe je dat via de class:
HTML:
1
 $(".progressbar").progressbar();


En als je de waarde wilt aanpassen doe je voor elke progressbar
HTML:
1
 $("#progressbar1").progressbar({value: 50});

Hallo!


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Aangezien dit puur clientside javascript/html is past dit beter in WEB. Dus ik verplaats het topic daar heen.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Snake schreef op vrijdag 02 mei 2014 @ 14:54:
[...]
Kan je niet beter de value op een element zetten met
data-value
?
TS gebruikt jQuery UI en die doet dat kennelijk zo :? ik ben gewoon uitgegaan van door TS gegeven code en heb dat "werkend gemaakt" volgens de vraag "zonder voor elke progressbar een ID aan te maken en dit later weer te moeten terugzoeken?". Ik had 't sowieso anders aangepakt (en waarschijnlijk gewoon elke PB een eigen id gegeven) :)

[ Voor 20% gewijzigd door RobIII op 02-05-2014 15:05 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • dxta
  • Registratie: Maart 2002
  • Niet online
Goed, uiteindelijk toch maar met ID's genereren en in bijbehorende JS code de ID's opzoeken opgelost. Thanks voor de tips :)

Een conceptuele vervolgvraag dan:
Stel ik heb een random <div> en ik wil hier een stuk JS op uitvoeren:
HTML:
1
2
<div>Something</div>
<script>$("xxx").hide()</script>

Wat zou er dan op de plaats van de xxx kunnen staan om de div te kunnen targetten zonder gebruik te hoeven maken van ID's of is dit uberhaupt niet mogelijk?

[ Voor 3% gewijzigd door dxta op 02-05-2014 15:46 ]

Omelette du fromage!


  • gekkie
  • Registratie: April 2000
  • Laatst online: 14:13
Dxta schreef op vrijdag 02 mei 2014 @ 15:36:
Een conceptuele vervolgvraag dan:
Stel ik heb een random <div> en ik wil hier een stuk JS op uitvoeren:
HTML:
1
2
<div>Something</div>
<script>$("xxx").hide()</script>

Wat zou er dan op de plaats van de xxx kunnen staan om de div te kunnen targetten zonder gebruik te hoeven maken van ID's of is dit uberhaupt niet mogelijk?
"div", maar jij wil waarschijnlijk selecteren op iets binnen het div element, tsja helaas pindakaas er is geen selector voor de inhoud van elementen. Zou performance wise nogal apenootjes zuigen .. en ook qua selector een zooitje worden .. aangezien de inhoud van een <div></div> complete lappen HTML zou kunnen zijn.

maar ik zou zo zeggen hier http://api.jquery.com/category/selectors/ is je gereedschapskist.

  • noes
  • Registratie: Augustus 2006
  • Niet online

noes

gek op benzine.

Wat betreft je progressbars, ik zou het zo oplossen:


JavaScript:
1
2
3
4
5
6
 
$('.progressbar').each(function(){
    $(this).progressbar({ 
        value: parseInt($(this).text(), 10))
    }); 
});


De HTML die je genereert hoeft alleen de class "progressbar" te hebben. De waarde (aantal procent) van de progressbar lees je simpelweg uit de tekst. Eventueel kan je dit ook doen met een data-attribuut, maar in dit geval kan je de progressbar leesbaar houden zonder JS door het gewoon in de tekst te plaatsen.

Uitleg code:
Iedere <div class="progessbar">...</div> wordt 'bezocht' door de .each(), de $(this) is vervolgens die div die je op dat moment 'bezoekt'. Daar lees je de tekst uit ($(this).text()), wat je meegeeft aan je progressbarscriptje zoals je eerder al deed.

Veel elegantere oplossing dan dat je het per progressbar handmatig doet. Eventuele id's zijn nog wel handig om met javascript de progressbars te updaten.




Wbt je conceptuele vervolgvraag: In de jQuery API kan je opzoeken hoe je je elementen allemaal kan selecteren. Houd er rekening mee, eenvoudiger is sneller. Bijvoorbeeld een ID is razendsnel, een class alweer iets minder. Bij een selector zoals [name$="value"] (attribuut "naam" eindigt op "value"), zal de code ieder element af moeten gaan met een name en die moeten vergelijken met jouw value. Mocht je dit ooit nodig hebben, maak dan eerst een selectie, bijvoorbeeld:
JavaScript:
1
 $('input').filter('[name$="value"]')

K54/R1250RS | K48/K1600GT | E61/550i

Pagina: 1