javascript - ASP.NET OnTextChanged 事件没有立即响应

标签 javascript asp.net

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

我还尝试了 onkeyPress 技术:

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

但是我收到了这样一条消息:

Attribute 'onkeyPress' is not a valid attribute of element 'TextBox'.

最佳答案

哪个版本的 ASP.NET?以下肯定对我有用*:

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

*不过,我确实添加了()到函数名称。

无论如何,如果 ASP.NET 对该属性名称有问题,您可以简单地在客户端附加一个处理程序。根据您的需要, input 事件可能更有意义。有点像现场 change 编辑输入值时触发的事件(通过击键、剪切、粘贴等)。这是一个示例:

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

注意浏览器兼容性here .

现在,前面的示例会随着输入值的每次更改而触发……这可能会相当长,即:4 次 只需键入“test”。由于您(大概)喜欢它来触发您的服务器端代码,我们希望在实际发布表单之前等待快速连续进行的任何更改:

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);
});
<input autofocus placeholder="type here" name="test-input"></input>

另请参阅:window.<a href="https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers.setTimeout" rel="noreferrer noopener nofollow">setTimeout()</a> , document.<a href="https://developer.mozilla.org/en-US/docs/Web/API/document.querySelector" rel="noreferrer noopener nofollow">querySelector()</a> , document.<a href="https://developer.mozilla.org/en-US/docs/Web/API/document.getElementsByName" rel="noreferrer noopener nofollow">getElementsByName</a> , 和 EventTarget.<a href="https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener" rel="noreferrer noopener nofollow">addEventListener()</a> .

在你后面的代码中:

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

关于javascript - ASP.NET OnTextChanged 事件没有立即响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28305306/

相关文章:

javascript - 如果单击 div 的边框,则防止 div 的单击操作

javascript - 显示解析时间的计时器 c#

c# - 控制级别 ValidateRequestMode 没有效果

asp.net - 在 ASP.NET Blazor Web Assembly 客户端应用程序中使用 Auth0 注销后出现登录提示

javascript - 使用 Javascript 和 Moment.js 获取天数

javascript - jQuery UI 自动完成与 json 文件

asp.net - IPrincipal 如何获得其角色?

c# - 如何获取特定月份和年份的天数?

javascript - 获取没有设置 css 的 div 的 .outerheight() 返回错误的数字

javascript - 如何随机选择三张图像,然后用新图像将它们淡出?