繁体   English   中英

当onkeyup事件定义“ setTimeout”(IE9)时,ASP.NET / Webform文本框不会触发自动回发

[英]ASP.NET/Webform Textbox does not fire the autopostback when onkeyup event defines “setTimeout” (IE9)

我在IE 9上遇到了一个奇怪的情况。它仅适用于Chrome和Firefox。 我将只发布相关代码。

这是一个遗留应用程序(VS2008)。 “ corp框架”在运行时定义了字段掩码,它使用onkeyup事件以及如下所示的javascript:

Javascript:

function mascara(o, f) {
    v_obj = o
    v_fun = f

    setTimeout(function() {
    v_obj.value = v_fun(v_obj.value)
    }, 1)
}

ASP.NET HTML:

<asp:TextBox runat="server" ID="TextBox5" AutoPostBack="true" OnTextChanged="TextChanged" />

掩码和回发事件适用于除IE9之外的所有浏览器。 当我在javascript遮罩函数中删除setTimeout时,回发有效,但是我失去了遮罩行为。

我发现AutoPostBack = true将使用setTimeout呈现onchange事件。 掩码再次使用setTimeout函数,当我删除掩码中的setTimeout时,回发适用于IE 9。

呈现的HTML:

<input name="TextBox5" type="text" onchange="javascript:setTimeout('__doPostBack(\'MPTextBox5\',\'\')', 0)" onkeypress="if (WebForm_TextBoxKeyHandler(event) == false) return false;" id="MPTextBox5" onkeyup="mascara(this, mnum);">

我无法弄清楚IE9的问题和解决方案。

MS不会修复此错误:

https://connect.microsoft.com/IE/feedback/details/761843/wont-fire-change-event-if-value-of-input-is-changed-using-keyup

解决方法位于: http : //bugs.jquery.com/ticket/10818

// Set value for IE without clearing the "changed" flag
this.innerText = val;
// Set value for everyone else
if ( this.value != val ) {
   this.value = val;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM