2009-06-12 26 views
0

我想從插件中調用一個函數,但該函數位於主頁面上,而不是插件的.js文件。調用駐留在插件主頁中的函數?

編輯

我有jQuery的解析非常大的XML文件和建築,隨後,一個大名單(當動態內容複製,粘貼,然後保存1.1 MB HTML文件),具有擴大通過/摺疊功能插入。 IE瀏覽器的整體性能超級慢,並且由於頁面/ DOM太大而假設。

我目前正在嘗試保存在event.data中的摺疊內容,當它被摺疊並從DOM中刪除它,然後當它被告知要展開時將它收回...我遇到的問題是當我帶回內容時,顯然「點擊」和「懸停」事件消失了。我試圖重新分配它們,目前是在插件擴展內容後在插件內部進行分配的。然而,問題在於我說的.click()中聲明的函數沒有定義。另外,懸停事件似乎並沒有被重新分配或者....

if ($(event.data.trigger).attr('class').indexOf('collapsed') != -1) { // if expanding 
     // console.log(event.data.targetContent); 
      $(event.data.trigger).after(event.data.targetContent); 
      $(event.data.target).hide(); 

/* This Line --->*/ $(event.data.target + 'a.addButton').click(addResourceToList); 

      $(event.data.target + 'li.resource') 
       .hover(
        function() { 
         if (!($(this).attr("disabled"))) { 
          $(this).addClass("over"); 
          $(this).find("a").css({'display':'block'}); 
         } 

        }, 
        function() { 
         if (!($(this).attr("disabled"))) { 
          $(this).removeClass("over"); 
          $(this).children("a").css({'display':'none'}); 
         } 
        } 
       ); 
      $(event.data.target).css({ 
             "height": "0px", 
             "padding-top": "0px", 
             "padding-bottom": "0px", 
             "margin-top": "0px", 
             "margin-bottom": "0px"}); 
      $(event.data.target).show(); 
      $(event.data.target).animate({ 
             height: event.data.heightVal + "px", 
             paddingTop: event.data.topPaddingVal + "px", 
             paddingBottom: event.data.bottomPaddingVal + "px", 
             marginTop: event.data.topMarginVal + "px", 
             marginBottom: event.data.bottomMarginVal + "px"}, "normal");//, function(){$(this).hide();}); 
      $(event.data.trigger).removeClass("collapsed"); 
      $.cookies.set('jcollapserSub_' + event.data.target, 'expanded', {hoursToLive: 24 * 365}); 
     } else if ($(event.data.trigger).attr('class').indexOf('collapsed') == -1) { // if collapsing 
      $(event.data.target).animate({ 
             height: "0px", 
             paddingTop: "0px", 
             paddingBottom: "0px", 
             marginTop: "0px", 
             marginBottom: "0px"}, "normal", function(){$(this).hide();$(this).remove();}); 
      $(event.data.trigger).addClass("collapsed"); 
      $.cookies.set('jcollapserSub_' + event.data.target, 'collapsed', {hoursToLive: 24 * 365}); 
     } 

編輯

因此,擁有新的眼光確實有差別。當我在週末離開後在今天上午審閱這篇文章中的代碼時,我發現我犯了錯誤。

此:

$(event.data.target + 'a.addButton').click(addResourceToList); 

應該是這個(a.addbutton前注意空格):

$(event.data.target + ' a.addButton').click(addResourceToList); 

同樣的問題,與 「li.resource」。所以它從來沒有指向正確的元素......謝謝你,雷內,你的幫助!

+0

你可以發佈一些代碼示例,顯示addResourceToList的定義位置和方式嗎? – grahamparks 2009-06-12 20:25:56

回答

0

我想你應該把你的函數作爲一些參數傳遞給插件,所以它可以調用它。

// inside your plugin: 
$.yourPlugin = function(f) { 
    f(); 
} 

// on the main page 
$.yourPlugin(yourFunction); 

另一種可能性是要調用由名稱的全局函數,但插件不應該依賴自己的全局函數存在。

或者爲您的問題提供一些更多的上下文,因爲您目前的描述過於簡短。

+0

我在上面添加了一些關於我的情況的更多細節。感謝你給與我的幫助! – 2009-06-12 20:18:41

0

在我看來,這個插件應該負責在第一個地方添加事件,然後在必要時重新添加它們。

但是,當這些點擊和懸停事件真的是外部插件,那麼你可能想看看jQuery live events

+0

感謝您將現場活動鏈接一併傳遞!我想我可以在未來找到它的用途! – 2009-06-15 16:20:57

相關問題