Visualizzazione risultati 1 fino 5 di 5

Discussione: JQuery creazione di funzioni in un ciclo for

  1. #1
    NLSweb non è connesso Altervistiano Junior
    Data registrazione
    17-01-2014
    Messaggi
    658

    Predefinito JQuery creazione di funzioni in un ciclo for

    Sto provando a creare una serie di funzioni ( esempio $("#mioDiv").click(...); ) in un unico ciclo for , invece di scriverle una ad una :
    esempio

    for(i=0;i<quantita;i++){
    var elemento = "#mioDiv"+i;
    $(elemento).click( ... );
    }

    ma non credo che funzioni , poiché quando si clicca sull'elemento non trova la funzione corrispondente.

    Sapete se esiste un modo per poterlo fare ? grazie in aticipo.

  2. #2
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Che funzione passi alla click? In che senso non funziona? Hai una pagina di esempio online?

  3. #3
    NLSweb non è connesso Altervistiano Junior
    Data registrazione
    17-01-2014
    Messaggi
    658

    Predefinito

    il link alla pagina di prova:

    http://nlsweb.altervista.org/lake/prova.html

    come potrai vedere nello script il ciclo di for mi dovrebbe generare le mie funzioni click , ma non sono funzionanti.
    ho creato una funzione esterna al ciclo for (con gli stessi parametri) che invece funziona.

    la ragione del perchè voglio usare un ciclo per creare le funzioni è che voglio creare la pagina dinamicamente con php ed
    assegnare automaticamente ad ogni foto della tabella la funzione assegnata all'elemento cliccato.
    Ultima modifica di NLSweb : 26-05-2014 alle ore 09.20.53

  4. #4
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Il problema è qui:
    Codice:
    $(elemento[i]).click(function(){
       $(dettaglioelemento[i]).animate({opacity:"1"},1000); 
      });
    Se provi a fare un log/alert di i, vedrai che ad ogni click vale sempre 8.
    A livello di interpretazione del codice non ho idea cosa avviene, forse la funzione viene bindata staticamente in qualche locazione di memoria e pertanto carica sempre il valore attuale (più `recente`) di i quando viene invocata.

    Per ovviare a questo problema, devi generare la funzione usando un'altra funzione. Ecco il codice:
    Codice:
    var elemento = new Array();
    var dettaglioelemento = new Array();
    var fine = $("#contafine").html();
    
    function clickFn(i) {
    	return function() {
    		$(dettaglioelemento[i]).animate({opacity:1}, 1000);
    	};
    }
     
    for(i=0;i<=fine;i++){
    	elemento[i] = "#tabella"+i+" img";
    	dettaglioelemento[i] = "#dettagli"+i;
    	$(elemento[i]).click(clickFn(i)); 
    }

  5. #5
    NLSweb non è connesso Altervistiano Junior
    Data registrazione
    17-01-2014
    Messaggi
    658

    Predefinito

    Grazie Mille !

    con la tua funzione tutto è ok !

    ..ora però devo riuscire a risolvere qualche problemino di funzionamento nella generazione automatica della pagina in php
    ad esempio dopo che la pagina è stata generata l'area di puntamento è ridotta , come se il div non contenesse niente quindi è molto piccolo; anche la posizione del div dettaglio non ritrova il corretto posizionamento.

    http://nlsweb.altervista.org/lake/news.php

    grazie tante per l'aiuto che mi hai dato ! è stato fondamentale .. chissà poi perché la variabile si incasinava...

    -- edit:
    ho risolto quesi problemini con il php .. l'area di puntamento doveva solo completare la lettura dei dati dal DB .. e ho sistemato il div dettaglio.

    grazie ancora per l'aiuto
    Ultima modifica di javascripter : 26-05-2014 alle ore 16.30.50

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •