2011-08-15 49 views
0

我有下面的代碼我的網頁打開一個窗口的fancybox每當有用戶點擊帶class = IFRAME中的鏈接。消防JQuery的窗口從裏面天冬氨酸面板

$.noConflict(); 
$(document).ready(function() { 



    $("a.fancybox").fancybox({ 
     'width': '75%', 
     'height': '75%', 
     'autoScale': false, 
     'transitionIn': 'elastic', 
     'transitionOut': 'elastic', 
     'type': 'iframe' 
    }); 


}); 

我的問題是,當鏈接嵌套在一個ASP面板內,這不起作用。我試着執行這裏找到的答案Rebinding events in jQuery after Ajax update (updatepanel)。結果是FancyBox在面板內容改變之前正確觸發。

不知道是否是相關的,但ASP面板裏面的內容是被用ajax刷新一個DataList每當一個radgrid控件改變行選擇。我想調用FancyBox的鏈接最初是在DataList項目模板中,然後我將它移動到DataList的外部,但它仍然在asp面板內部。我希望它留在asp面板中,因此我正在嘗試爲我的JQuery找到適當的事件來響應。

我也試着築巢JQuery的響應該radgrid控件RowClick事件在函數中。那也行不通。

接下來我應該嘗試什麼?

編輯 根據下面的答案,它不會出現有一個很好的方式來實現這一點。所以,這是另一種潛在剝皮的方法。也許我可以在頁面上的現有工具欄上添加一個按鈕,而不是在面板中使用超鏈接。我已經從動態設置NavigateURL的工具欄中激活了一個JavaScript函數,並在新窗口中打開它。以下是該功能的一個示例。第一個IF語句顯示了我目前如何實現設置URL並在RadWindow中啓動它。第二個IF聲明是我認爲我可以使用相關URL打開FancyBox打開的地方。也許這將解決我原來的問題中提出的ajax問題。有誰知道如何使這項工作?我可以從Javascript打開FancyBox嗎?

function click_handler(sender, args) { 

    var button = args.get_item(); 
    buttontext = button.get_text(); 
     if (buttontext == "Request Return") { 
      //This is an example that uses a RadWindow instead of FancyBox 
      var mastertable = $find("<%=RadGrid1.ClientID %>").get_masterTableView(); 
      var PackageID = mastertable.get_dataItems()[0].getDataKeyValue("PackageID"); 

      var oManager = GetRadWindowManager(); 
      oManager.open("Return.aspx?ID=" + PackageID, "RadWindow1"); 
      return false; 
      } 
if (buttontext == "Open My Fancy Box") { 
//do something here to a dynamic URL in FancyBox 
} 
+0

聽起來像是你需要使用'活()'方法的附加活動。見http://api.jquery.com/live/ – Tejs

回答

0

這可悲的是一種痛苦。這裏的問題是你在$ .fancybox調用之後添加控件。如果這是一個點擊事件,我只會使用:

$("selector").live('click', function() {... 

顯然我們不能這樣做。所以我看到它的方式有兩種選擇:

  1. 內容加載後重新綁定fancybox。這正是你想要處理你提到的帖子(http://stackoverflow.com/questions/301473/rebinding-events-in-jquery-after-ajax-update-updatepanel)你確定args.get_isPartialLoad( )真的回來了嗎?該代碼是否被執行?

  2. 如果你不能得到上面的方法來工作,有一個混亂,醜陋的解決方案(我使用的一個)。我打開fancybox來源並將其更改爲使用實時綁定。這個想法是,當您調用.fancybox而不是僅綁定到DOM中的當前對象時,我們將綁定到可能添加的任何新對象。這是一個這樣做的例子:http://code.google.com/p/fancybox/issues/detail?id=18#c15。請注意,這是危險的,並且不是真正的建議 - 如果您升級fancybox,則需要記住進行更改。

+0

謝謝賈斯汀。在我迷戀FancyBox的內部工作之前,我正在探索一個潛在的替代解決方案,它涉及使用Javascript來使FancyBox打開,而不是依賴應用於超鏈接的類。請參閱我對原始問題的編輯。思考? – hughesdan

0

這裏,似乎工作的解決方案。基本上它就像將JavaScript附加到您希望觸發FancyBox打開的單擊事件一樣簡單。然後包括以下手動呼叫。

$.fancybox(
    '<h2>Hi!</h2><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis mi eu elit tempor facilisis id et neque</p>', 
//you could also put an iframe tag or any other html of your choosing above 
    { 
      'autoDimensions' : false, 
     'width'     : 350, 
     'height'    : 'auto', 
     'transitionIn'  : 'none', 
     'transitionOut'  : 'none' 
    } 
); 

答案位於下「提示&技巧,#6」 http://fancybox.net/blog