确保在 OnClick 之前触发文本框文本更改 (ASP.NET 注入"setTimeout" )



考虑以下方案:

<asp:TextBox ID="txt" runat="server" AutoPostBack="true" OnTextChanged="txt_TextChanged"></asp:TextBox>
<asp:Button ID="btn" runat="server" OnClick="btn_Click" CausesValidation="false" UseSubmitBehavior="false" />

渲染时,这两个控件变为:

<input name="txt" type="text" onchange="javascript:setTimeout('__doPostBack('txt','')', 0)" onkeypress="if (WebForm_TextBoxKeyHandler(event) == false) return false;" id="txt">
<input type="button" name="btn" onclick="javascript:__doPostBack('btn','')" id="btn">

多亏了SettieMout,在更改事件之前,点击事件正在触发。

经过一番研究,我发现ASP.NET是因为在某些较旧版本的IE中出现了旧的小故障。

但是,这引起了问题

如何修复执行订单,因此在单击之前始终触发文本?

PS :我愿意使用JavaScript/jQuery更改其中一个事件,但是我对此类解决方案的性能有疑问(因为我可能会被迫使用est它(

我使用一些黑客解决了它,如果有人知道一个问题,我仍然为更好的解决方案而开放。
现在,我在页面加载上调用此功能:

function removeSetTimeout() {
    var inputs = "select, input[type=text], input[type=number], input[type=date], input[type=time]";
    $(inputs).each(function (index, elem) {
        var change = $(elem).attr('onchange');
        if (change) {
            var patch = /setTimeout('__doPostBack(\'.*?\',\'\')', 0)/.exec(change);
            if (patch) {
                change = change.replace(patch[0], patch[0].substring(12, patch[0].length - 5).replace(/\/g, ''));
                $(elem).attr('onchange', change);
            }
        }
    });
}

最新更新