0

我正在开发名为“TimePicker”的用户控件,

此用户控件利用 jquery timepicker,并将其包装以使其易于在 asp.net 中使用。

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

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

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

问题是在更新面板重新加载后,页面中的任何脚本都不会再次运行,因此 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 %>', '');
        }        
     });
}

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

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

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

欢迎任何建议。

谢谢,

艾坦。

4

2 回答 2

0

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

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

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

于 2012-07-30T11:28:14.963 回答
0

使用页面中的 Updatepanel 更改控件的 Id 并且 jquerydocument.ready事件没有被正确调用,您可以从这里阅读更多信息-

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

带有更新面板的 jquery

于 2012-07-30T10:44:04.483 回答