2013-08-23 46 views
15

創建和調用自定義函數我需要建立在jQuery的一個簡單的功能,將其他一些功能如何在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. 
    }); 
}); 

我的螢火得到的錯誤中調用:reload_cart() is not defined

回答

25

reload_cart是本地第一個$(document).ready()回調。你不能從外部範圍調用它。

你應該合併的功能結合在一起:

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

    reload_cart(); 

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

一個更好的解決辦法是建立一個cart對象,添加reload它的原型,並初始化它所有的回調之外。

+0

感謝您的快速響應。我可以有一個如何創建購物車對象並從任何地方調用它的示例代碼。我沒有太多的原型經驗。 – user1911703

+0

MDN在這些主題上有非常好的文章:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Inheritance_and_the_prototype_chain –

7

是的,因爲您在第一個$(document).ready(function(){})的範圍內聲明該函數,因此它不在該函數範圍之外。

我不確定爲什麼你會多次撥打$(document).ready()。試試這個:

$(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. 
    }); 
}); 

另外,您也可以聲明你的函數$(document).ready()之外,這將是全球範圍內提供。

6

把你的函數定義:

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

外的document.ready。

當前,其範圍僅限於document.ready處理程序內。

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