$(document).ready()和prm.add_endRequest()中的重复代码

时间:2012-05-14 19:23:13

标签: jquery asp.net updatepanel

修改 在我更新最新的代码后,现在我看到有两个“字符数”而不是只显示一个。 这是否意味着它执行两次相同的代码? document.ready和add_endrequest?

  $('[id*="txtNewComments"]').charCount({
            allowed: 300,
            warning: 15,
            counterText: 'Characters left: '
        });

我正在使用带有updatepanel和一些jquery的asp.net页面,当我开始使用updatepanel时,我的jquery和javascript函数停止工作,我没有看到任何动作......在我搜索后我发现了这个:jQuery $(document).ready and UpdatePanels?链接是非常翔实的,但我有一个问题。

如果我有更新面板,

下面的代码不起作用......

$(document).ready(function() {

     $('[id*="txtNewComments"]').charCount({
            allowed: 300,
            warning: 15,
            counterText: 'Characters left: '
        });

     ..........
     ..........
});

//update:

function UpdateEmployee(....) {}

所以,如果我按照推荐的方式继续,那么我必须有两套每个脚本,一个在docuement.ready中,而另一组脚本在endRequest中有一些像这样的东西如果我遵循这种模式,则下面正在使用更新面板

$(document).ready(function() {
    // bind your jQuery events here initially
});

var prm = Sys.WebForms.PageRequestManager.getInstance();

prm.add_endRequest(function() {
    // re-bind your jQuery events here
});

我的问题是:有没有办法在document.ready中设置一套脚本而不是另一套脚本?还有另一种在endrequest中吗?...维护两组脚本很痛苦。

有什么想法吗?

使用更新面板进行更新

<asp:ScriptManager runat="server" />
    <asp:UpdatePanel runat="server">
        <ContentTemplate>
            <asp:Repeater runat="server" ID="Repeater1" OnItemCommand="OnItemCommand" OnItemDataBound="OnItemDataBound">
                <HeaderTemplate>
                    <table border="0" cellpadding="0" cellspacing="0">
                        <tr>
                            <th></th>
                            <th>First Name</th>
                            <th>Last Name</th>
                        </tr>
                </HeaderTemplate>
                <ItemTemplate>
                    <tr>
                        <td>
                            <asp:ImageButton ID="Edit" ImageUrl="~/Images/EditDocument.png" runat="server" CommandName="edit" />
                            <asp:ImageButton ID="Delete" ImageUrl="~/Images/Delete_black_32x32.png" runat="server"
                                CommandName="delete" />
                        </td>
                        <td>
                            <asp:Label runat="server" ID="firstName"><%# Eval("FirstName") %></asp:Label>
                            <asp:PlaceHolder runat="server" ID="firstNameEditPlaceholder" />
                            <input type="hidden" runat="server" id="firstNameHidden" visible="false" />
                        </td>
                        <td>
                            <asp:Label runat="server" ID="lastName"><%# Eval("LastName") %></asp:Label>
                            <asp:PlaceHolder runat="server" ID="lastNameEditPlaceholder" />
                            <input type="hidden" runat="server" id="lastNameHidden" visible="false" />
                        </td>
                    </tr>
                </ItemTemplate>
                <FooterTemplate>
                    <tr>
                        <td>
                            <asp:ImageButton ID="Delete" ImageUrl="~/Images/112_Plus_Blue_32x32_72.png" runat="server"
                                OnClick="OnAddRecord" />
                        </td>
                        <td><asp:TextBox runat="server" ID="NewFirstName" /></td>
                        <td><asp:TextBox runat="server" ID="NewLastName" /></td>
                    </tr>
                    </table>
                </FooterTemplate>
            </asp:Repeater>
        </ContentTemplate>
    </asp:UpdatePanel>

1 个答案:

答案 0 :(得分:2)

试试这个:

$(document).ready(function() {
    bindJqueryFeatures();
});

var prm = Sys.WebForms.PageRequestManager.getInstance();

prm.add_endRequest(function() {
    bindJqueryFeatures();
});


function bindJqueryFeatures(){
    //bind your jQuery events here initially 
}

现在,如果您想更改或添加一些jQuery功能,只需在 bindJqueryFeatures()函数中插入代码,这样您就不需要在两种方法中共享代码: $(document ).ready() prm.add_endRequest()

it can be usefull

这就是你需要的吗?