2011-05-18 43 views
1

我們有一些代碼,它們會向出現的幾個腳本塊添加相同的函數,以便在文檔準備就緒時調用該隊列。例如:在jquery就緒隊列中調用一次函數

$(document).ready(function(){ 
    alert('hey'); 
}); 
$(document).ready(function(){ 
    alert('hey'); 
}); 
$(document).ready(function(){ 
    alert('hey'); 
}); 

這不會引起任何問題,但當然不必多次調用相同的代碼。

不改變生成重複塊的代碼,有沒有辦法讓jquery只運行第一個代碼塊並跳過其餘的?

請記住,就緒隊列在重複代碼之前和之後有其他功能。

+4

爲什麼你在第一個地方有重複的代碼?真的有必要嗎?而不是想出一個解決方案來有效地去除對重複代碼的調用,那麼去問題的根源並刪除重複的代碼不是更好嗎? – netbrain 2011-05-18 08:13:29

+1

@netbrain好主意!我向其他人介紹了你的啓發性評論,他們正在忙着調查。至於還在努力回答這個具體問題的可憐的靈魂,他仍在挖! – zaf 2011-05-18 08:27:05

+0

讓您的代碼在每個圖層的後端和前端保持乾爽。在我看來,你在幾個頁面片段中有相同的JavaScript代碼,並且當頁面片段被組裝到一個單獨的html頁面時,你會得到你現在正在經歷的結果。這是一個正確的假設嗎? – netbrain 2011-05-18 09:51:34

回答

1

我會使用對象文本換行重複的代碼,並設置時,它被稱爲一次布爾,所以它不會被再次運行:

$(document).ready(function(){ 
    DuplicateHelper.SomeMethod1(); 
}); 
$(document).ready(function(){ 
    DuplicateHelper.SomeMethod1(); 
}); 
$(document).ready(function(){ 
    DuplicateHelper.SomeMethod1(); 
}); 

var DuplicateHelper = { 
    HasMethod1Run: false, 

    SomeMethod1: function() { 
     if (!this.HasMethod1Run) { 
      // do logic 

      this.HasMethod1Run = true; 
     } 
    } 
} 

編輯

你不」如果您要動態生成代碼,則必須使用對象字面值,但您可以使用與布爾值相同的原則:

var runCode = true; 

$(document).ready(function(){ 
    if (runCode) { 
     DuplicateHelper.SomeMethod1(); 
     runCode = false; 
    } 
}); 
$(document).ready(function(){ 
    if (runCode) { 
     DuplicateHelper.SomeMethod1(); 
     runCode = false; 
    } 
}); 
$(document).ready(function(){ 
    if (runCode) { 
     DuplicateHelper.SomeMethod1(); 
     runCode = false; 
    } 
}); 

但是,我同意netbrain這種情況表明您的解決方案體系結構中存在其他問題。

+0

不錯,但那會改變生成單個代碼塊的代碼。 – zaf 2011-05-18 08:28:29

相關問題