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下拉列表中的索引发生变化时,这个更改事件是否有效?
这里需要注意的一件非常重要的事情是,在浏览器中,从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更方便。