blur()导致设置为autopostback的下拉列表中的双重回发

时间:2011-08-26 19:57:13

标签: jquery asp.net internet-explorer

我的应用程序中有一个页面,其中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没有展示双重回发。

看起来此问题与jQuery problem with change event and IE8

有关

0 个答案:

没有答案