我的应用程序中有一个页面,其中blur()使用jquery连接到dropdownlist的onchange事件。此drowndownlist设置为autopostback。在进行选择时,模糊用于从下拉列表中移除焦点。我不会详细说明为什么要这样做。
向onchange事件添加blur()会导致双回发。这不会发生在每个选择上,但经常发生双回发。我可以在trace.axd中看到这一点,它显示了两个具有相同时间戳的回发。
我已经能够通过简单的示例页面重现这一点。
<%@ Page Title="Home Page" Language="C#" AutoEventWireup="true" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
Session["log"] = string.Format("{0}value={1}<br/>", Session["log"], DropDownList1.SelectedValue);
Session["Counter"] = (int)Session["Counter"] + 1;
}
else
{
Session["log"] = string.Empty;
Session["counter"] = 0;
}
}
</script>
<html>
<head>
<script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>
<script>
$(document).ready(function () {
$("select").change(function (e) {
e.target.blur();
});
});
</script>
</head>
<body>
<form runat="server">
<h2>
Double Postback
</h2>
<p>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true">
<asp:ListItem Text="1" Value="1"></asp:ListItem>
<asp:ListItem Text="2" Value="2"></asp:ListItem>
<asp:ListItem Text="3" Value="3"></asp:ListItem>
</asp:DropDownList>
</p>
<p>
<%=Session["counter"] %><br />
<%=Session["log"] %>
</p>
</form>
</body>
</html>
当发生这种情况时,会话内容会记录(比trace.axd更容易)。您将看到两个重复的日志值吐出到屏幕上。我正在使用ASP.NET 4.0。
有谁能告诉我为什么使用document.ready为onchange添加模糊会导致双重回发?似乎它必须以某种方式绊倒第二次onchange事件。
编辑:这似乎只发生在IE上(IE8就是我正在使用的)Chrome和Firefox没有展示双重回发。
有关