0

我一直在遇到著名的 jQuery 在回发后无法运行的问题。所以我做了一些研究,最好的新方法是 jQuery 的 live() 函数。但事实证明,这个从 1.7 版开始就被弃用了,取而代之的是 on() 函数。所以我将我的 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>

希望对此有所帮助。谢谢。

4

2 回答 2

0

您可以使用function pageLoad(sender, args) { }而不是$(document).ready()

ASP.NET AJAX pageLoad() 快捷函数不是针对特定于浏览器的优化,而是作为更统一过程的结果而被调用。

该过程在所有浏览器上以相同的方式排队,通过调用 setTimeout 超时为 0 毫秒。这个技巧利用 JavaScript 的单线程执行模型(理论上)将 init 事件推回,直到 DOM 刚刚完成加载。

与直觉相反,这不是调用 pageLoad() 的唯一点。在每次部分回发之后也会调用它。它基本上是 Application.Init 和 PageRequestManager.EndRequest 的组合。

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

于 2012-10-13T19:51:54.800 回答
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
}

`

于 2017-04-23T23:23:10.820 回答