如何获取使用javascript/jquery动态创建控件的客户端ID。Jquery/Javascript:我如何获得动态生成的控件的ClientID
我有一个日期选择器,如果值改变,它应该触发一个textchanged事件并执行一些功能。下面是我的脚本
function BindControlEvents() {
$(".datepicker").datepicker({
format: 'mm/dd/yyyy',
autoclose: true,
todayBtn: 'linked'
}).on('changeDate', function (ev) {
__doPostBack('MainContent_dteFr1002', '');
}).on('clearDate', function (ev) {
//to do
});
}
//Initial bind
$(document).ready(function() {
BindControlEvents();
});
//Re-bind for callbacks
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(function() {
BindControlEvents();
});
代码隐藏动态生成的文本框的DatePicker
protected void Page_Init(object sender, EventArgs e)
{
LoadControls(reportDefId);
}
protected void LoadControls(int reportDefId)
{
HtmlTableCell cellDate = new HtmlTableCell();
TextBox dte = new TextBox();
dte.ToolTip = "If you need to filter for blank dates, please select date range 1/1/1753-1/1/1753";
dte.Attributes.Add("type", "text");
dte.Attributes.Add("class", "datepicker");
if (rfl.fieldDisplayName.Contains("Start") || rfl.fieldDisplayName.Contains("End"))
dte.ID = "dte" + id.ToString();
else
dte.ID = "dteFr" + id.ToString();
dte.Style["Width"] = "85px";
dte.Style["Height"] = "24px";
dte.TextChanged += new EventHandler(dte_TextChanged);
cellDate.Controls.Add(dte);
}
为了测试,我已经硬编码的客户端ID“MainContent_dteFr1002”的,看它是否触发textchnaged事件。它的确如此。所以我需要动态地传递cliendid值,其中cliendID包含dte。
我已经搜索,但我没有找到合适的答案。
请帮忙! 谢谢
添加上面的行工作正常。但是,在ChangeDate上给_doPostBack添加另一个日期选择器时,我每次更改/清除日期而不是关闭。如果我注释掉_doPostBack,datepicker工作正常。但我应该做回发并调用textchanged方法。调用代码隐藏方法的好方法是什么?我如何修改? – crony
我有点困惑,然后需要从你的代码中看到更多的代码。每次你调用_doPostBack时,它会创建一个新的日期选择器?你想要的是那种行为吗?该代码片段是否在位于PageLoad()中的代码中创建日期选择器?如果这是带有Page.IsPostBack的回传,您可以检查后面的代码,如果它是PostBack,则可以有条件地说不要创建另一个日期选择器。在页面加载的服务端,你可以用这样的代码来获取回发参数以及字符串参数= Request [“__ EVENTARGUMENT”]; –
是的,它创建了一个新的日期选择器。我不需要这种行为。我已经添加了datepicker文本框控件的代码。请找到并请建议!谢谢 – crony