2013-08-23 18 views
15

Ho bisogno di creare una semplice funzione in jQuery che chiamerà in altre poche funzionicome creare e chiamare una funzione personalizzata in jQuery

$(document).ready(function() { 
    function reload_cart() { 
    alert('reload cart called'); 
    } 
}); 
$(document).ready(function() { 
    reload_cart(); //i need to call from here. 
}); 
$(document).ready(function() { 
    $('a.add_to_cart').live('click', function (e) { 
    reload_cart(); //i need to call from here. 
    }); 
}); 

L'errore che ottengo in Firebug: reload_cart() is not defined.

risposta

25

reload_cart è locale per il vostro primo $(document).ready() callback. Non puoi chiamarlo da un ambito esterno.

Si dovrebbe unire le funzioni insieme:

$(document).ready(function() { 
    function reload_cart() { 
     alert('reload cart called'); 
    } 

    reload_cart(); 

    $('a.add_to_cart').live('click', function(e) { 
     reload_cart(); 
    }); 
}); 

Una soluzione ancora migliore sarebbe quella di creare un oggetto cart, aggiungere reload al suo prototipo, e inizializzare al di fuori di tutti i callback.

+0

grazie per la vostra risposta veloce. posso avere un codice di esempio su come creare oggetto carrello e chiamarlo da qualsiasi luogo. non ho molta esperienza del prototipo. – user1911703

+0

MDN ha articoli molto carini su questi argomenti: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Inheritance_and_the_prototype_chain –

7

Sì, perché la funzione è stata dichiarata nell'ambito del primo $(document).ready(function(){}) in modo che non sia disponibile al di fuori di tale ambito di funzioni.

Non so perché si chiamerebbe $(document).ready() più di una volta. Prova questo:

$(document).ready(function(){ 
    function reload_cart() { 
     alert('reload cart called'); 
    } 

    reload_cart(); //i need to call from here. 


    $('a.add_to_cart').live('click', function(e) { 
     reload_cart(); //i need to call from here. 
    }); 
}); 

In alternativa si può anche dichiarare la funzione al di fuori di $(document).ready() e sarà disponibile a livello globale.

6

Metti la tua definizione di funzione:

function reload_cart() { 
    alert('reload cart called'); 
} 

Fuori document.ready.

Attualmente, ha ambito solo all'interno del gestore document.ready.

$(document).ready(function(){ 
//reload_cart is only available here 
    function reload_cart() { 
     alert('reload cart called'); 
    } 
}); 
Problemi correlati