jQuery function και setTimeout

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

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

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

jQuery function και setTimeout

Δημοσίευση από charavge » 08 Ιαν 2013 11:24

Στον παρακάτω κώδικα για κάποιο λόγο δουλεύει μόνο το click ενώ, μόνο αν το αφαιρέσω δουλεύει το if. Τι κάνω λάθος;

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

	setTimeout(function(){
		$(".calendarLink").click();
		if ($("#arrow").attr("src") == "images/Galleries/arrow-down.png") {
			$("#arrow").attr("src", "images/Galleries/arrow-up.png");
		} else {
			$("#arrow").attr("src", "images/Galleries/arrow-down.png");
		}
	}, 10000);

Άβαταρ μέλους
Christianago
Δημοσιεύσεις: 332
Εγγραφή: 12 Νοέμ 2009 13:36

jQuery function και setTimeout

Δημοσίευση από Christianago » 09 Ιαν 2013 00:13

To $(".calendarLink").click(); τι δουλεια κανει στον κωδικα σου;

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

jQuery function και setTimeout

Δημοσίευση από charavge » 09 Ιαν 2013 10:47

Καλημέρα.

Σου δίνω και τον υπόλοιπο κώδικα. Βρήκα μία λύση την οποία θα γράψω μόλις το λύσουμε, αλλά δεν καταλαβαίνω γιατί δεν παίζει αυτό.

Τι κάνει αυτός ο κώδικας (ή τι θέλω να κάνει):
Έχω μία περιοχή όπου υπάρχει ένα Ημερολόγιο (calendar) και κάπου μέσα στη σελίδα έχω ένα κουμπί το οποίο εμφανίζει και κρύβει (toggle) το Ημερολόγιο. Το .calendarLink που ρώτησες είναι το κουμπί που ανοίγει και κλείνει το Ημερολόγιο. Στο κουμπί έχω προσθέσει και ένα βελάκι (arrow) το οποίο αναπαριστά την κατάσταση του Ημερολογίου (down=ανοικτό, up=κλειστό).

Μόλις φορτώσει η σελίδα ορίζω ένα κλικ στο κουμπί για να ανοίξει το Ημερολόγιο με το $(".calendarLink").click(); και θέλω μετά από 10 δευτερόλεπτα να κλείσει το Ημερολόγιο και να αλλάξει το εικονίδιο του βέλους (arrow).

Ο κώδικας που δεν δουλεύει είναι ο παρακάτω:

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

//Toggle button icon
$(document).ready(function() {
	//toggle
	$("#calendarArea").hide();
	$(".calendarLink").show();
 
    $('.calendarLink').click(function(){ //when button pressed toggle the thumbs
		$("#calendarArea").slideToggle();
    });

	//Set the first click to open the calendar
	$(".calendarLink").click();

	//Set a delay of 10 seconds to close the calendar and change the icon
   setTimeout(function(){ 
      $(".calendarLink").click(); 
      if ($("#arrow").attr("src") == "images/Galleries/arrow-down.png") { 
         $("#arrow").attr("src", "images/Galleries/arrow-up.png"); 
      } else { 
         $("#arrow").attr("src", "images/Galleries/arrow-down.png"); 
      } 
   }, 10000);

});

$(function(){
  $(".calendarLink").live('click', function() {
    if ($("#arrow").attr("src") == "images/Galleries/arrow-down.png") {
      $("#arrow").attr("src", "images/Galleries/arrow-up.png");
    } else {
      $("#arrow").attr("src", "images/Galleries/arrow-down.png");
    }
    $(this).toggleClass("on");
  });
});
Όπως είπα και πριν, το πρόβλημα βρίσκεται στο μέρος του setTimeout.

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6230
Εγγραφή: 30 Νοέμ 2004 03:09

jQuery function και setTimeout

Δημοσίευση από fafos » 09 Ιαν 2013 18:23

Efoson thes na anoigei to hmerologio me to loading giati tou dineis hide? Ta "click()" den xreiazontai kai prepei na peis sto setTimeout ti na kanei me to div tou hmerologiou an perasoun ta 10 deutera:

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

//Toggle button icon
$(document).ready(function () {
	//toggle
	$("#calendarArea").show();
	$(".calendarLink").show();

	$('.calendarLink').click(function () { //when button pressed toggle the thumbs
		$("#calendarArea").slideToggle();
	});

	//Set a delay of 10 seconds to close the calendar and change the icon
	setTimeout(function () {
		if ($("#arrow").attr("src") == "images/Galleries/arrow-down.png") {
			$("#arrow").attr("src", "images/Galleries/arrow-up.png");
			$("#calendarArea").slideToggle();//hide calendar

		} else {
			$("#arrow").attr("src", "images/Galleries/arrow-down.png");
		}
	}, 10000);
});

$(function () {

	$(".calendarLink").live('click', function () {

		if ($("#arrow").attr("src") == "images/Galleries/arrow-down.png") {
			$("#arrow").attr("src", "images/Galleries/arrow-up.png");
		} else {
			$("#arrow").attr("src", "images/Galleries/arrow-down.png");
		}
		$(this).toggleClass("on");

	});
});
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

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

jQuery function και setTimeout

Δημοσίευση από charavge » 10 Ιαν 2013 10:02

Ευχαριστώ fafos! Μου κάνει.
Ο λόγος που θέλω να ανοίγει μόλις φορτώσει η σελίδα είναι για να το βλέπει ο επισκέπτης. Να "χτυπάει στο μάτι" που λέμε. Γιατί μετά από 10 δευτερόλεπτα θέλω να κλείνει και να ξέρει ο επισκέπτης ότι εκεί έχει ένα ημερολόγιο.
Πρέπει να κλείνει γιατί καταλαμβάνει πολύ χώρο και από κάτω ακριβώς εμφανίζω διάφορες εγγραφές που σχετίζονται με την επιλεγμένη ημερομηνία. Σε χρήστες με toolbars και χαμηλές αναλύσεις θα έχω σοβαρό πρόβλημα.
Δυστυχώς δε μπορεί να μπει και κάπου πλευρικά. Μόνο αν το έκρυβα/εμφάνιζα με CSS, αλλά δεν ταιριάζει με το όλο concept.

Χρησιμοποίησα .click γιατί δε σκέφτηκα το .slideToggle κατευθείαν. Έχει σημαντική διαφορά;

Σας ευχαριστώ.

Απάντηση

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

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

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