我正在用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下拉列表中的索引发生变化时,此更改事件是否有效?
答案 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更方便。