我在aspx页面中分别放置了一个列表框和一个包含Selected Index Changed和Text Changed事件的文本框。现在,如果我在文本框中写入内容然后单击其他位置选择列表框中的值,则会调用文本框的第一个文本更改事件,然后调用列表框的选定索引更改事件。之后再次发送文本框的文本更改事件。任何机构都可以提供一些见解,为什么会这样?
以下是标记:
<asp:ListBox ID="ListBox1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ListBox_IndexChanged">
<asp:ListItem Text="abc" />
<asp:ListItem Text="def" />
</asp:ListBox>
<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true" OnTextChanged="Text_Changed" />
代码背后:
namespace WebApplication1
{
public partial class _Default : System.Web.UI.Page
{
protected void ListBox_IndexChanged(object sender, EventArgs e)
{
}
protected void Text_Changed(object sender, EventArgs e)
{
}
}
}
答案 0 :(得分:1)
问题/问题是AutoPostBack
通过将JavaScript事件附加到您的控件来工作。每个浏览器处理JavaScript的方式略有不同,因此订购时没有真正的保证。
例如,当我在谷歌浏览器中尝试您的代码时,会发生以下事件序列:
但是,在 Internet Explorer 8 中,我注意到以下顺序:
我认为这不是ASP.NET的错,而是跨浏览器的各种JavaScript实现。
如果您需要依赖特定的事件序列,AutoPostBack
不会削减它。根据您的具体情况,我可能会尝试使用跨浏览器兼容的库(如jQuery)来实现自己的JavaScript事件。您可以使用__doPostBack()
函数以编程方式回调服务器。
答案 1 :(得分:0)
选择新项目时,列表框文本部分中的文本将替换为项目文本。这就是你得到第二个TextChanged事件的原因。