2012-10-13 83 views
0

我一直在遇到着名的問題,jQuery在回發後無法正常工作。所以我做了一些研究,最好的新方法是jQuery的live()函數。但是事實證明,這個版本自1.7版以來已被棄用,並被替換爲on()函數。 所以我改變了我的jQuery插件使用on()函數,但它仍然不能在回發後使用。UpdatePanel + jQuery使用on()

插件:

$(document).ready(function() { 
    $('.drag').on("mouseover", function() { 
     AfterPostBack(); 
     $(this).draggable() 
      .click(function() { 
       $(this).draggable({ disabled: false }); 
      }).dblclick(function() { 
       $(this).draggable({ disabled: true }); 
      }); 
    }); 
    $('.text_label').on("blur",function() { 

     $(this).removeClass('focus'); 
    }); 
}); 

var AfterPostBack = function() { 
    $('.drag').draggable("option", "containment", 'parent'); 
    $('.drag').draggable("option", "snap", 'parent'); 
    $('.drag').draggable("option", "cursor", 'move'); 
}; 

的網頁:

<script type="text/javascript" src="Scripts/jquery-1.8.0.min.js"></script> 
<script type="text/javascript" src="Scripts/jquery-ui-1.8.23.custom.min.js"></script> 
<script type="text/javascript" src="Scripts/myplugin.js"></script> 
<link href="Styles/myplugin.css" rel="stylesheet" type="text/css" /> 

<asp:UpdatePanel runat="server" ID="UP1" UpdateMode="Conditional" ChildrenAsTriggers="false"> 
<ContentTemplate> 
<asp:Button ID="btn_AddText" runat="server" Text="Add Text" OnClick="AddText" /> 
<asp:PlaceHolder ID="ph1" runat="server"> 
    <div class="drag"> 
     <asp:Label ID="lbl1" class="text_label" runat="server" Text="Click Me"/> 
    </div> 
</asp:PlaceHolder> 
</ContentTemplate> 
<Triggers> 
<asp:AsyncPostBackTrigger ControlID="btn_AddText" EventName="Click" /> 
</Triggers> 
</asp:UpdatePanel> 

很想一些這方面的幫助。 謝謝。

回答

0

您可以使用function pageLoad(sender, args) { }代替$(document).ready()

而是針對特定瀏覽器的優化,在ASP.NET AJAX頁面加載()快捷功能被稱爲更均勻過程的結果。

該進程在所有瀏覽器上以相同的方式排隊,通過調用setTimeout以超時0毫秒。這個技巧利用JavaScript的單線程執行模型(理論上)將init事件推回到DOM完成加載之後。

違背直覺,這不是調用pageLoad()的唯一要點。它也被稱爲每個部分回發後。它基本上是Application.Init和PageRequestManager.EndRequest的組合。

來源:https://encosia.com/document-ready-and-pageload-are-not-the-same/

+0

本文討論在

0

有2個事件add_init和運行的document.ready每頁同時那些刷新

,第二個是頁面加載觸發每一個異步回發,但不會觸發第一次加載

我做了3種功能,並把代碼中的培訓相關

Sys.Application.add_init(function() { 
     // Initialization code here, meant to run once. 
     try { 
      //doOnes(); 
      doAllways(); 
     } catch (e) { 
      console.log('Sys.Application.add_init: ', e); 
     } 
}); 

$(document).ready(function() { 
    console.log('document.ready'); 
    //doAllways(); 
} 

function pageLoad() { 
    console.log('pageLoad'); 
    //doAftrerAjax(); 
    doAllways(); 
} 

function doOnes() { 
    console.log('doOnes'); 
} 

function doAftrerAjax() { 
    console.log('doAftrerAjax'); 
} 

function doAllways(){ 
    console.log('doAllways'); 
    AfterPostBack();    <---this the place for the code 
} 

`