Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [jquery] come far richiamare una funzione ad un oggetto creato da codice

    Ciao a tutti, sono nuovo su questo forum e sto imparando ad utilizzare appunto le jquery.
    La mia domanda è la seguente:
    Ho una funzione del tipo:
    $('body a').click(function(){

    alert("ciao");

    });

    che fa apparire un alert al click di qualsiasi link all'interno del body.
    Se aggiungo una altro link nella pagina con una funzione di questo di questo tipo:
    $("body").append("prova2");
    perchè quando clicco sul link prova2 non viene richiamata la prima funzione e quindi non appare il messaggio di alert?
    Spero di essere stato chiaro, grazie in anticipo...

  2. #2
    Perché la prima funzione sostanzialmente prende tutti gli elementi <a> presenti IN QUEL MOMENTO nella pagina e vi associa una funzione ad ognuno di essi. Quando ne aggiungi un altro, chiaramente, non gli è stata associata una funzione, perche la prima funzione è stata chiamata in un momento in cui non esisteva.

    È che la funzione $('body a').click(funct); serve a non scrivere un codice più lungo che sostanzialmente fa:

    1-ottieni tutti gli elementi che coincidono con la regola di CSS
    2-per ognino di essi associa all'evento onclick, la funzione funct

    è come se prendesse n elementi <A>

    e chiamasse:

    a.click = funct;

    (poi non so se fa l'append della funzione, cioè se aggiunge la funzione a quella eventualmente già presente, o se la sostituisce)

    Spero di essermi spiegato
    I DON'T Double Click!

  3. #3
    Grazie, ho capito.
    Quello che vorrei sapere ora è se esiste un modo per aggirare questo problema?

  4. #4
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    questa e' una problematica che si propone spesso a fronte di contenuti caricati in maniera asincrona

    puo' valere la pena di ribaltare completamente l' approccio: non sono i singoli link a dover gestire il click, ma il body, a cui l' evento, in condizioni normali, risalira' comunque

    codice:
      $(document).ready(function(){
    	$('body').click(function(event){
    		var clickedElement=event.target;
    		if(clickedElement.nodeName.toLowerCase()!='a') clickedElement=$(clickedElement).parents('a')[0];
    
    		if(clickedElement) {
    			/* da qui in poi quanto far eseguire al click sul link */
    			alert(clickedElement.href);
    			return false;
    		}
    	});
      });
    ciao

  5. #5
    Grazie, ho provato e funziona perfettamente.
    Ma questa è l'unica soluzione per una situazione di questo tipo, cioè non vorrei andare a modificare tutte le funzioni della mia applicazione...

  6. #6
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    allora ti conviene almeno trovarti in una situazione del genere
    codice:
      $(document).ready(function(){
    	function allerta(){
    		alert(this.href);
    		return false;
    	}
    	$('body a').click(allerta);
      });
    dove, in qualsiasi momento, dopo aver appeso link ad un contenitore (nell' esempio, con id="tuoDiv")
    codice:
    $("body #tuoDiv").append("html.it");
    $("body #tuoDiv").append("yahoo.com");
    assegni ad essi la stessa funzione al click
    codice:
    $('#tuoDiv a').click(allerta);
    ciao

  7. #7
    ecco, ma una domanda:

    $('id').click(funct)

    fa l'append della funzione o la sostituisce?
    I DON'T Double Click!

  8. #8
    Grazie 1000!

  9. #9
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    Originariamente inviato da artorius
    ecco, ma una domanda:

    $('id').click(funct)

    fa l'append della funzione o la sostituisce?
    in questa forma, sempre e comunque aggiunge a quanto gia' definito da eseguire per quel gestore evento,
    ma richiamando n volte
    $('#tuoDiv a').click(allerta);
    il click al link non generera' n alert

  10. #10
    grazie!!!
    I DON'T Double Click!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.