我不是第一个抱怨OnSelectedIndexChanged在IE浏览器不点火,一旦部署:OnSelectedIndexChanged没有发射一旦部署
- OnSelectedIndexChanged not firing in production - IE 11 only
- DropDownList not firing OnSelectedIndexChanged
- ASP.Net DropDownList OnSelectedIndexChange not firing
- onChange and onSelectedIndexChanged events not firing - selectbox
- 而很多更多。
这里是我的代码:
<asp:DropDownList id="MyDropDownList" runat="server">
<asp:ListItem Text="Life" Value="1" />
<asp:ListItem Text="Universe" Value="2" />
<asp:ListItem Text="Everything" Value="42" />
</asp:DropDownList >
和:
protected override void OnInit(EventArgs e)
{
MyDropDownList.AutoPostBack = true;
MyDropDownList.SelectedIndexChanged += new EventHandler(MyDropDownList_SelectedIndexChanged);
}
protected void MyDropDownList_SelectedIndexChanged(object sender, EventArgs e)
{
//lots of cool stuff
}
现在让我们挖掘到的结果HTML。
这里的Chrome浏览器(IE或者用兼容模式):
<select name="MyDropDownList" onchange="javascript:setTimeout('__doPostBack(...)', 0)" id="MyDropDownList">
<option value="1" selected="selected">Life</option>
<option value="2">Universe</option>
<option value="42">Everything</option>
</select>
这里,它是IE10/IE11(无兼容性):
<select name="MyDropDownList" id="MyDropDownList">
<option value="1" selected="selected">Life</option>
<option value="2">Universe</option>
<option value="42">Everything</option>
</select>
惊喜!
onchange
属性是不见了!
行...
所以现在我知道为什么事件不是从IE中触发。
...但为什么它呈现不同?
重要细节:这只发生一次部署到服务器(我相信它是IIS6)。本地,它工作正常。
另一个重要的细节:不幸的是,安装任何形式的补丁不是我的选择。
事实是,我刚刚发布我的代码原样。你的代码更清洁,但并不能解决问题。你认为我应该把它放在这里,只是为了让它更易读? –
我的意思是你为什么要从使用onInit的代码中调整事件处理程序,并且你有能力从客户端执行它?也许onInit函数延迟IE和Firefox – Sora
OnInit发生在服务器上。为什么它会因不同的浏览器而有所不同? –