更改jQuery中的事件,用于ASP.NET DropDown列表中的SelectedIndexChanged

时间:2014-10-13 14:20:52

标签: c# jquery asp.net

我正在用C#开发一个服务器控件。我正在尝试通过jQuery读取selectedIndex在下拉菜单中更改。

我的所有研究都提到使用变更事件。结果,我通过警报构建了一个简单的测试,以查看是否正确调用了此事件。这是我的剧本:

 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下拉列表中的索引发生变化时,此更改事件是否有效?

2 个答案:

答案 0 :(得分:1)

这里需要注意的一件非常重要的事情是,在浏览器中,从JavaScript的角度来看,没有这样的东西和#34;一个ASP.NET DropDown&#34;。 HTML元素是select,与任何其他select没有区别。

我关心的是这个选择器:

$($='_ddlMyTest')

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

$('#_ddlMyTest')

如果按照您的建议,客户端id 不同(WebForms有这样做的历史),那么您需要确保&#39 ;重新使用id。你是怎么做到的?我不确定 你是如何从服务器端代码中StringBuilder的上下文中得到的,但大概是否有&#39; sa { {1}}属性然后它看起来像:

ClientID

或:

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

(不确定JavaScript代码中的builder.Append(string.Format("$('#{0}').change(function() {", ClientID)); 字符是否会混淆{)或:

string.Format

无论你认为哪个更清楚,它们基本上应该产生相同的结果,只有轻微的性能差异。关键是它需要在服务器端代码中发生,因为呈现的JavaScript不知道builder.Append("$('#"); builder.Append(ClientID); builder.Append("').change(function() {"); 属性。

答案 1 :(得分:0)

我知道这个问题很老,但你也可以使用jQuery&#34; find&#34;语法$(&#34; [id $ =&#39; ddlMyTest&#39;]&#34;)找到&#34;以&#34;结尾的控件ddlMyTest。 很多时候,这比从后面的代码中查找ClientId更方便。