ASP.NET OnTextChanged事件无法立即响应

时间:2015-02-03 17:41:00

标签: javascript asp.net

它正在运行,但它没有立即响应。当我点击某处时,它正在工作。

我也尝试过onkeyPress技术:

<asp:TextBox ID="txtWriter" runat="server" onkeyPress="txtOnKeyPress"  ></asp:TextBox>

但我收到的消息如下:

  

属性'onkeyPress'不是元素'TextBox'的有效属性。

1 个答案:

答案 0 :(得分:3)

哪个版本的ASP.NET?以下当然对我有用 *

<script>
    function txtOnKeyPress() {
        console.log("txtOnKeyPress");
    }
</script>
<asp:TextBox ID="txtWriter" runat="server" onkeypress="txtOnKeyPress()" />

* 虽然我确实在函数名称中添加了()

无论如何,如果ASP.NET存在该属性名称的问题,您只需在客户端附加一个处理程序即可。根据您的需要,input事件可能更有意义。这是一种实时change事件,它会在编辑输入值时触发(通过按键,剪切,粘贴等)。这是一个样本:

&#13;
&#13;
document.querySelector("input").addEventListener("input", function(e) {
  console.log("value: %o", this.value);
});
&#13;
<input autofocus placeholder="type here"></input>
&#13;
&#13;
&#13;

注意浏览器兼容性here

现在,上一个示例在输入值的每一次更改时都会触发...这可能非常有点,即: 4次,只需键入,&#34; test&#34;。由于您(可能)喜欢它来触发您的服务器端代码,因此我们希望在实际发布表单之前等待快速连续发生的任何更改:

&#13;
&#13;
function __doPostBack(name, argument) {
  // dummy version of ASP.NET's __doPostBack  
  console.log("value: %o", document.getElementsByName(name)[0].value);
}

var t; // handle for our timeout
document.querySelector("input").addEventListener("input", function(e) {
  // input received... cancel the previous timeout, if any
  clearTimeout(t);
  // wait 1000 milliseconds (1 second) for more input before posting
  t = setTimeout(__doPostBack, 1000, this.name);
});
&#13;
<input autofocus placeholder="type here" name="test-input"></input>
&#13;
&#13;
&#13;

另请参阅:window.setTimeout()document.querySelector()document.getElementsByNameEventTarget.addEventListener()

在你的代码背后:

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack && Request.Form["__EVENTTARGET"] == txtWriter.UniqueID) {
        GridView1.DataSource = /* some data source */;
        GridView1.DataBind();
    }
}