2012-12-20 85 views
2

例如:如何避免從ajax加載頁面時覆蓋js函數。

--- a.php --- 
<script> 
function fun() { 
    console.log('this is fun() from a.php'); 
} 
function loadb() { 
    $("#loadb").load("b.php"); 
} 
function removeb() { 
    $("#loadb").remove(); 
} 
</script> 
This is a.php 
<input type="button" onclick="fun()" value="echo fun"> 
<input type="button" onclick="loadb()" value="load b.php"> 
<input type="button" onclick="removeb()" value="remove b.php"> 
<div id="loadb"></div> 

--- b.php --- 
<script> 
function fun() { 
    console.log('this is fun() from b.php'); 
} 
</script> 
This is b.php 

我從Ajax的,所述「有趣()」中a.php只會加載b.php後,將覆蓋 甚至當我通過去除,有趣的除去b.php()在b.php中仍然保留在頁面中。

確保ajax-ed頁面調用它自己的js函數的實用方法是什麼?

Cos a.php將加載許多其他頁面,由不同的開發人員開發 他們可能會在頁面內寫入自己的js函數,有時他們的函數會有相同的命名,例如:remove(),add()..等

我想知道,如果有任何有效的方法來避免這種情況?

謝謝。

+1

歡迎來到SO。我請你解釋你的問題,並詳細說明你期望的答案。 – Luv

+1

您可以使用getter/setter功能來防止覆蓋函數/對象! – Nippey

回答

1

答案是一個普通的簡單號碼。

由於瀏覽器在將腳本標記附加到DOM後執行的操作的結果是無法保護函數不被腳本所做的某些分配覆蓋。

你真的沒有現實的其他解決方案,而不是正確地,每個模塊中:

  1. 正確命名空間的公共職能的各個模塊中
  2. 範圍內的每個模塊中的私有函數,與Self Executing Function模式