2010-04-30 15 views
7

Fino a ora ho scaricato tutto il mio codice jQuery all'interno della funzione document.ready. Sto pensando che per certe situazioni questo non è il modo migliore per andare.Solo eseguire effetti/operazioni jQuery su determinate pagine

ad esempio: se voglio che un'animazione si attivi quando una certa pagina carica qual è il modo migliore per farlo.

$(document).ready(function() { 
    $("#element_1").fadeIn(); 
    $("#element_2").delay('100').fadeIn(); 
    $("#element_3").delay('200').fadeIn(); 
}); 

Se questa è proprio all'interno di document.ready poi ogni volta QUALSIASI pagina carica che sta andando a controllare ogni linea e potete trovare quell'elemento. Qual è il modo migliore per dire a jQuery di eseguire solo una parte di codice su una determinata pagina per evitare questo problema.

risposta

10

verificando se esistono elememt nella pagina precedente eseguire animazione

if ($("#element-1").length) { 
    $("#element-1").fadeIn(); 
} 

e così via con altri elementi #element_2 e #element_3


a @numediaweb:

implementazione corrente jQuery is() è come sotto

is: function(selector) { 
    return !!selector && jQuery.filter(selector, this).length > 0; 
}, 

così, può essere più intelligente di utilizzare is() ma è più veloce da usare solo length e ancora più veloce di citare in giudizio document.getElementById().length

+1

Quindi, per evitare la ripetizione solo potessi avere un ID univoco per l'elemento di corpo di ogni pagina e controlla se esiste! – Galen

+0

si hai ragione! –

+0

Un approccio migliore è quello di [Impostare un attributo di classe per il tag del corpo] (http://stackoverflow.com/questions/9578348/best-way-to-execute-js-only-on-specific-page/9578898#9578898) – numediaweb

0

includere solo il codice che desidera da eseguire quando il DOM è pronto per questo pagina particolare. $(document).ready(... non significa che si dovrebbe avere lo stesso pezzo di codice eseguito su ogni pagina. Ciò richiederebbe vari controlli per sapere cosa deve essere eseguito.

Sono sicuro che avrete alcune funzionalità comuni che vorreste eseguire su ogni pagina, nonché alcune funzionalità specifiche della pagina. In questo caso, è possibile inserire la funzionalità comune in una singola funzione e chiamarla dallo $(document).ready(... in modo che l'unico codice rimanente sia specifico per quella particolare pagina. Per esempio:

function common() { 
    alert('hello'); 
} 

$(document).ready(function() { 
    common(); 
    // do some page-specific stuff 
}); 

sono d'accordo con l'esecuzione di vari controlli su ogni singola pagina in modo il codice sa dove siamo. Sembra ingombrante e totalmente evitabile, per esempio:

function doAnimation() { 
    $("#element_1").fadeIn(); 
    $("#element_2").delay('100').fadeIn(); 
    $("#element_3").delay('200').fadeIn(); 
} 

$(document).ready(function() { 
    if(window.location.href == 'http://example.com/foo') { 
     doAnimation(); 
    } 
    if(this page has blah) { 
     doBlah(); 
    } 
}); 

Idealmente, ciò che dovrebbe essere è:

$(document).ready(function() { 
    // do stuff for foo.php 
}); 
+0

stai suggerendo di avere diversi file js per ogni pagina? – Galen

+0

@Galen - sì, un po '. Sto cercando di incoraggiarti a usare il codice solo dove è necessario, piuttosto che inserire i condizionali per scoprire se è necessario eseguirlo. – karim79

Problemi correlati