asp.net jQuery焦点导致完整的回发

时间:2017-11-27 19:47:24

标签: javascript c# jquery asp.net dotnetnuke

我有一个包含动态生成的文本框的表单,每个文本框都有一个OnTextChanged事件的回发触发器(自动回发)。文本框全部放置在更新面板中,以便在用户输入文本框中的值后,页面的不同部分以异步方式更新。

当您在其中一个文本框中输入值时,然后单击其中一个文本框(以输入另一个值),OnTextChanged事件后新文本框焦点将丢失。为了解决这个问题,我将新的文本框ID设置为客户端会话变量,以便在完成OnTextChanged事件时(在服务器端),我可以读取客户端会话变量并设置相应的文本框焦点。

我遇到的问题是,当我尝试通过jQuery设置新文本框的焦点时,页面将几乎随机发出一个完整的回发(屏幕闪烁)(每2或3个文本框条目)。如果我只注释掉设置焦点的代码行,则页面不会执行完整的回发。最糟糕的是,如果我在jQuery焦点事件之前在浏览器中设置了一个断点,它仍然会在断点被击中之前进行整页回发,它只会在完全回发之后到达那里。这怎么会发生?

编辑:

<asp:UpdatePanel runat="server">
    <ContentTemplate>
        <asp:ListView runat="server">
            <LayoutTemplate>
                <asp:PlaceHolder runat="server" ID="itemPlaceholder"></asp:PlaceHolder>
            </LayoutTemplate>
            <ItemTemplate>
               <asp:TextBox runat="server" ID="tbMonth" CssClass="LHSTextBox" onkeypress="return isNumberKey(event)" OnTextChanged="SubCat_OnTextChanged" AutoPostBack="True"</asp:TextBox>
            </ItemTemplate>
       </asp:ListView>
  </ContentTemplate>
</asp:UpdatePanel>

获取新选择的文本框ID的JavaScript:

$(".LHSTextBox").focusin(function () {
    sessionStorage.setItem('newFocus', this.id);
});

C#OnTextChanged函数:

protected void SubCat_OnTextChanged(object sender, EventArgs e)
{
    //do stuff
    ScriptManager.RegisterStartupScript(Page, typeof(Page), "setFocusOnIdKey", "setFocusOnId()", true);
}

我在OnTextChanged服务器端函数之后调用的JavaScript函数:

function setFocusOnId() {
    var newFocus = sessionStorage.getItem('newFocus');
    if (newFocus !== null) {
        $('#' + newFocus).focus(); 
        //if I comment out this line, the page doesn't do a full postback, but if I leave it in, it will, even before this is hit
    }
    return false;
}

0 个答案:

没有答案