2012-01-03 15 views
7

Ho una semplice funzione di jQuery comeCome evitare di ripetere la funzione jQuery?

$('.button').click(function(){ 
    $("#target").slideToggle().load('http://page'); 
}); 

Con slideToggle comportamento, ogni clic causa una diapositiva, ma il problema è che caricherà url nuovo troppo.

Come è possibile limitare la funzione load() da eseguire solo una volta, ma slideToggle() ad ogni clic. In altre parole, come impedire load() (caricare solo, non l'intera funzione) nei clic successivi?

risposta

8
$('.button') 
    .on('click.loadPage', function() { 
     $("#target").load('http://page'); 
     $(this).off("click.loadPage"); 
    }) 
    .on('click.slideToggle', function(){ 
     $("#target").slideToggle(); 
    }); 

e un altro modo, senza vars globali:

$('.button') 
    .on('click', function() { 
     if (!$(this).data("loaded")) { 
      $("#target").load('http://page'); 
      $(this).data("loaded", true); 
     } 
     $("#target").slideToggle(); 
    }); 
+0

+1 Mi piace questo. – pimvdb

+0

+1 per non utilizzare alcuna variabile globale non necessaria. – jbabey

8

Avere una variabile (globale) che indica se è stata caricata o meno. Per esempio:

var loaded = false; 
$('.button').click(function(){ 
    if(!loaded){ 
     $('#target').load('http://page'); 
     loaded = true; 
    } 
    $("#target").slideToggle(); 
}); 

Questo farà sì che la slideToggle a verificarsi ad ogni click, ma la pagina da caricare solo una volta. :)

Problemi correlati