Κάτι αντίστοιχο του isset (php) σε javascript

Κώδικας, πληροφορίες, ερωτήσεις και απαντήσεις σχετικές με την JavaScript.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Shadow25
Δημοσιεύσεις: 2
Εγγραφή: 02 Αύγ 2012 16:37

Κάτι αντίστοιχο του isset (php) σε javascript

Δημοσίευση από Shadow25 » 24 Αύγ 2012 23:22

Γειά σας παιδιά! Συγνώμη αν υπάρχει ήδη παρόμοιο θέμα, δεν το είδα... :/
Θέλω να ρωτήσω, χρησιμοποιώ scriptaculous και έχω 3 κουμπιά. Όταν τα πατάει κάποιος θέλω να εμφανίζεται ενα πλαίσιο (το έχω κάνει ήδη). Χρησιμοποιώ αυτό: <a href="#" onclick="Effect.SlideDown('slidedown_demo'); return false;"> Button1 </a>. Όλα οκ. Δουλεύει. Αυτό που θέλω είναι όταν κάποιος πατάει το δεύτερο ή το τρίτο κουμπί, να ελέγχει αν έχει ανοίξει το πλαίσιο1 και αν ναι να το κλείνει και να ανοίγει το πλαίσιο2 αλλιώς να ανοίγουν κανονικά. Μπορεί να μου πεί κάποιος πώς θα το καταφέρω;

Άβαταρ μέλους
charavge
Δημοσιεύσεις: 378
Εγγραφή: 14 Σεπ 2006 15:47

Κάτι αντίστοιχο του isset (php) σε javascript

Δημοσίευση από charavge » 25 Αύγ 2012 03:03

Εγώ πολύ απλά θα έβαζα ένα flag και θα έλεγχα κάθε φορά αν το flag έχει μία συγκεκριμένη τιμή π.χ. 1 να κλείνει το πλαίσιο. Δηλαδή, όταν πατάω το κουμπί 1 ορίζω μία μεταβλητή την οποία της δίνω μία τιμή π.χ. flag_variable=1;
Πρακτικά αντί να καλείς στο onclick την Effect.SlideDown('slidedown_demo') καλείς τη function check() με την οποία ελέγχεις την τιμή της μεταβλητής και πράττεις αναλόγως.
Εννοείται ότι όταν κλείνει το πεδίο θα πρέπει να μηδενίζει το flag. Στην ουσία και boolean θα μπορούσες να χρησιμοποιήσεις (true, false) σαν flag.

Ελπίζω να σε βοήθησε η σκέψη μου. Με ένα απλό function μπορείς να το κάνεις.

Άβαταρ μέλους
charavge
Δημοσιεύσεις: 378
Εγγραφή: 14 Σεπ 2006 15:47

Κάτι αντίστοιχο του isset (php) σε javascript

Δημοσίευση από charavge » 25 Αύγ 2012 13:34

Σήμερα με λίγο πιο καθαρό μυαλό το ξαναείδα.
Είναι απλό:
Ορίζεις κάπου ένα var openedSlide=0; όταν φορτώσει το έγγραφό σου.
Φτιάχνεις ένα function effectSlide() μέσα στο οποίο ελέγχεις κάθε φορά ποιό είναι ανοικτό και ποιό θέλεις να ανοίξεις.
Εφόσον το openedSlide είναι 0 δεν υπάρχει λόγος να κλείσεις κάτι, όταν όμως αλλάξει κλείνεις αυτό που είναι ανοιχτό.
Για να ελέγχεις ποιό είναι ανοικτό κάθε φορά που πατάς το κουμπί ορίζεις το openedSlide αντίστοιχα.

Έχεις 3 κουμπιά για κάθε slide. Έστω ότι τα slides είναι slide1, slide2, slide3:

Κώδικας: Επιλογή όλων

<button type="button" onclick="effectSlide&#40;'slide1'&#41;">Button 1</button>
<button type="button" onclick="effectSlide&#40;'slide2'&#41;">Button 2</button>
<button type="button" onclick="effectSlide&#40;'slide3'&#41;">Button 3</button>
Έτσι:

Κώδικας: Επιλογή όλων

function effectSlide&#40;slideToOpen&#41;&#123;
    if &#40;openedSlide == 0 &#41; &#123; //Αν είναι κλειστά όλα τα Slides
           Effect.SlideDown&#40;slideToOpen&#41;;  //Ανοίγεις το Slide σου
           openedSlide=slideToOpen; //Ορίζεις τώρα το ανοικτό Slide

    &#125;else&#123; // Αν είναι κάποιο ήδη ανοικτό...
           Effect.SlideUp&#40;openedSlide&#41;;  //Κλείνεις το ήδη ανοικτό Slide
           Effect.SlideDown&#40;slideToOpen&#41;;  //Ανοίγεις το νέο Slide σου
           openedSlide=slideToOpen; //Ορίζεις τώρα το νέο ανοικτό Slide
    &#125;
&#125;
Δεν ξέρω άμα δουλεύει ακριβώς, αλλά σε γενικές γραμμές αυτή είναι η φιλοσοφία.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Κάτι αντίστοιχο του isset (php) σε javascript

Δημοσίευση από korgr » 25 Αύγ 2012 18:22

Και μια εναλλακτική που ακολούθησα προχθές που χρειάστηκα σε ένα σημείο ένα τέτοιο απλό μενουδάκι:

Κώδικας: Επιλογή όλων

function show&#40;id&#41;&#123;
	window.theID = id;
	obj = $&#40;'#'+id&#41;;
	obj.toggle&#40;'fast'&#41;;
	$&#40;'div'&#41;.each&#40;function&#40;&#41;&#123;
		if&#40;$&#40;this&#41;.attr&#40;'data-rel'&#41; == 'section' && $&#40;this&#41;.attr&#40;'id'&#41; != window.theID&#41;&#123;
			if&#40;$&#40;this&#41;.is&#40;'&#58;visible'&#41;&#41;  $&#40;this&#41;.toggle&#40;'fast'&#41;;
		&#125;
	&#125;&#41;;	
&#125;
Τα divs που ανοιγοκλείνω έχουν data-rel="section" αλλά μπορεί να είναι όποιο όνομα θέλεις.

Το καλείς πχ με

Κώδικας: Επιλογή όλων

onclick="show&#40;'option1'&#41;"
όπου 'option1' το id του div που θες να ανοίξεις.
Γίνεται χρήση της is(':visible') σε όλα τα divs με data-rel="section" (εκτός από αυτό που εμφανίζεις) και έτσι τα κλείνει αυτόματα όλα τα άλλα.
Επίσης με αυτό τον τρόπο μια επιλογή μπορεί να ανοίγει και να κλείνει σαν διακόπτης (θεωρία accordion menu)

Ολοκληρωμένο παράδειγμα:

Κώδικας: Επιλογή όλων

<a href="javascript&#58;void&#40;0&#41;" onclick="show&#40;'option1'&#41;">Option 1</a>
<div data-rel="section" id="option1" style="display&#58;none">
<!-- εδώ οι κρυφές υποεπιλογές -->
</div>

Απάντηση

Επιστροφή στο “JavaScript και Frameworks”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 2 επισκέπτες