2009-06-12 10 views
0

プラグイン内から関数を呼び出したいのですが、関数はメインページにあり、プラグインの.jsファイルにはありません。プラグインのメインページにある関数を呼び出していますか?

EDIT

私はjQueryのスルー/折りたたみ機能を拡張している非常に大規模なXMLファイルや建物、その後、大規模なリスト(動的なコンテンツは、コピー貼り付け、その後、保存されている1.1メガバイトの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}); 
     } 

EDIT ....どちらかの再割り当て。今朝の週末にこの記事のコードを見直していたので、私はどこにいたのか分かりました。

この: "li.resource" と

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

同じ問題:

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

は、この( a.addbutton の前にスペースを気づか)である必要があります。だから正しい要素を指していたことはありませんでした...ありがとう、ルネ、あなたの助けに!

+0

addResourceToListがどこでどのように定義されているかを示すコードサンプルを投稿できますか? – grahamparks

答えて

0

私はあなたの関数をいくつかの引数としてプラグインに渡すべきだと思うので、それを呼び出すことができます。

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

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

他の可能性は、名前でグローバル関数を呼び出すことであろうが、プラグインが存在するために、独自のグローバルな機能に頼るべきではありません。

また、あなたの現在の説明があまりにも簡単すぎるので、あなたの質問にいくつかの文脈を提供してください。

+0

上記の私の状況についてもう少し詳しく述べました。あなたが私に与えることができる任意のおかげでありがとう! –

0

このプラグインは最初にイベントを追加する必要があり、必要に応じてイベントを再追加できます。

しかし、これらのクリックイベントとホバーイベントが実際にプラグインの外部にある場合は、jQuery live eventsをご覧ください。

+0

ライブイベントのリンクにもご一緒いただきありがとうございます!私は将来的にそれを使うことができると思う! –

関連する問題