更新面板回发后Javascript块不会运行,更复杂

时间:2012-07-30 10:17:53

标签: javascript jquery asp.net updatepanel postback

我正在处理名为'TimePicker'的用户控件,

此usercontrol使用jquery timepicker,并将其包装起来,以便在asp.net中使用它。

我正在使用一个简单的脚本将jquery timepicker绑定到文本框:

$('#<%= timepicker_textbox.ClientID %>').timepicker({
    onClose: function() {
        __doPostBack('<%= timepicker_textbox.ClientID %>', '');
    }        
});

我还选择将此文本框放在更新面板中,以避免在用户选择时间并导致回发之后进行完整页面刷新。

问题是,在重新加载updatepanel之后,页面中的任何脚本都没有再次运行,因此jquery timepicker不会应用于文本框。

我设法通过添加以下代码来解决此问题:

Sys.Application.add_load(function () {
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(<%= timepicker_textbox.ClientID %>_onControlLoad());
});


function <%= timepicker_textbox.ClientID %>_onControlLoad()
{
    $('#<%= timepicker_textbox.ClientID %>').timepicker({
        onClose: function() {
            __doPostBack('<%= timepicker_textbox.ClientID %>', '');
        }        
     });
}

这会导致函数被注册,然后在每个部分回发上再次运行。

问题是这只解决了这个特定时间戳的问题, 而不是同一页面中的任何其他元素!

这对我来说是个主要问题,因为我在页面中有多个时间戳, 在一次选择时选择时间时,其他时间不起作用......

欢迎任何建议。

谢谢,

埃坦。

2 个答案:

答案 0 :(得分:0)

使用页面中的Updatepanel更改控件的ID并且jquery document.ready事件未被正确调用, 你可以从这里阅读更多内容 -

http://www.dotnetfunda.com/articles/article471-jquery-and-aspnet-ajax-updatepanel.aspx

jquery with update panel

答案 1 :(得分:0)

一个简单的解决方案是将class =“timepicker”添加到您想要该功能的任何文本框中,然后使用它:

$(document).ready(function(){
    $('.timepicker').timepicker({
        onClose: function() {
            __doPostBack($(this).attr('id'), '');
        }        
     });
});

一般来说,学会放弃从服务器驱动客户端行为,因为这种心态并不适用于jQuery极其简单的选择/添加行为范例。整个更新面板/回发的东西也是老派,但如果你必须使用它,你必须注册我上面用Sys.WebForms.PageRequestManager.getInstance().add_endRequest显示的功能,就像你正在做的那样。或者只是将$(document).ready放在更新面板中,这也可能有用。