我正在处理名为'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 %>', '');
}
});
}
这会导致函数被注册,然后在每个部分回发上再次运行。
问题是这只解决了这个特定时间戳的问题, 而不是同一页面中的任何其他元素!
这对我来说是个主要问题,因为我在页面中有多个时间戳, 在一次选择时选择时间时,其他时间不起作用......
欢迎任何建议。
谢谢,
埃坦。
答案 0 :(得分:0)
使用页面中的Updatepanel更改控件的ID并且jquery document.ready
事件未被正确调用,
你可以从这里阅读更多内容 -
http://www.dotnetfunda.com/articles/article471-jquery-and-aspnet-ajax-updatepanel.aspx
答案 1 :(得分:0)
一个简单的解决方案是将class =“timepicker”添加到您想要该功能的任何文本框中,然后使用它:
$(document).ready(function(){
$('.timepicker').timepicker({
onClose: function() {
__doPostBack($(this).attr('id'), '');
}
});
});
一般来说,学会放弃从服务器驱动客户端行为,因为这种心态并不适用于jQuery极其简单的选择/添加行为范例。整个更新面板/回发的东西也是老派,但如果你必须使用它,你必须注册我上面用Sys.WebForms.PageRequestManager.getInstance().add_endRequest
显示的功能,就像你正在做的那样。或者只是将$(document).ready
放在更新面板中,这也可能有用。