blur () вызывает двойную обратную передачу в раскрывающемся списке, установленном на autopostback - PullRequest
1 голос
/ 26 августа 2011

У меня есть страница в моем приложении, где blur () подключена к событию onchange раскрывающегося списка с помощью jquery.Этот drowndownlist настроен на автоответчик.Размытие предназначено для удаления фокуса из выпадающего списка при выборе.Я не буду вдаваться в подробности того, почему это делается.

Добавление blur () к событию onchange приводит к двойным обратным передачам.Это происходит не при каждом выборе, но очень часто происходит двойной постбэк.Я могу видеть это в 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 проблемой с событием изменения и IE8

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...