jQuery中的change事件,用于ASP.NET下拉列表中的SelectedIndexChanged

本文关键字:下拉列表 NET SelectedIndexChanged ASP 用于 中的 change 事件 jQuery | 更新日期: 2023-09-27 18:26:19

我正在C#中开发一个服务器控件。当下拉菜单上所选的索引发生变化时,我正试图通过jQuery进行阅读。

我所有的研究都暗示了使用变化事件。因此,我通过警报构建了一个简单的测试,以查看是否正确调用了此事件。这是我的脚本:

 var builder = new StringBuilder();
 builder.Append("$(document).ready(function() {");
 builder.Append("$($='_ddlMyTest').change(function() {");
 builder.Append("alert('hello');");
 builder.Append("}");
 builder.Append(");");
 builder.Append("}");
 builder.Append(");");

我调用我控制的这个脚本来注册启动脚本:

ScriptManager.RegisterStartupScript(Page, GetType(), "myfunction", String.Format("<script type='text/javascript'> {0}</script>", builder), false);

我知道jQuery是正确注册的,如果我只是在$(document).ready中发出警报,我确实在浏览器中看到了它,那么上面的内容也是正确注册的。

我为该元素呈现的HTML看起来像一个普通的选择。我还尝试传入ClientID,而不是使用$='_ddlMyTest',但没有效果。在那之后我已经确定了这场比赛。

我的问题是,当asp.net下拉列表中的索引发生变化时,这个更改事件是否有效?

jQuery中的change事件,用于ASP.NET下拉列表中的SelectedIndexChanged

这里需要注意的一件非常重要的事情是,在浏览器中,从JavaScript的角度来看,没有"ASP.NET DropDown"这样的东西。HTML元素是一个select,与任何其他select没有什么不同。

我关心的是这个选择器:

$($='_ddlMyTest')

我以前从未见过$=语法,我甚至不清楚它打算做什么。如果客户端元素的id_ddlMyTest,那么选择器将是:

$('#_ddlMyTest')

如果如您所建议的,客户端id与不同(WebForms有这样做的历史),那么您需要确保使用的是id。你是怎么尝试的?我真的不确定你会如何从服务器端代码中的StringBuilder上下文中获得它,但据推测,如果有ClientID属性,那么它看起来会像:

builder.Append("$('#" + ClientID + "').change(function() {");

或:

builder.Append(string.Format("$('#{0}').change(function() {", ClientID));

(不确定JavaScript代码中的{字符是否会干扰string.Format)或:

builder.Append("$('#");
builder.Append(ClientID);
builder.Append("').change(function() {");

无论你认为哪个更清楚,它们本质上都应该产生相同的结果,但性能差异较小。关键是它需要在服务器端代码中发生,因为所呈现的JavaScript不知道ClientID属性。

我知道这个问题很老了,但您也可以使用jQuery"find"语法$("[id$='ddlMyTest']")来查找"以"ddlMyTest结尾的控件。很多时候,这比从代码后面查找ClientId更方便。