它正在运行,但它没有立即响应。当我点击某处时,它正在工作。
我也尝试过onkeyPress
技术:
<asp:TextBox ID="txtWriter" runat="server" onkeyPress="txtOnKeyPress" ></asp:TextBox>
但我收到的消息如下:
属性'onkeyPress'不是元素'TextBox'的有效属性。
答案 0 :(得分:3)
哪个版本的ASP.NET?以下当然对我有用 * :
<script>
function txtOnKeyPress() {
console.log("txtOnKeyPress");
}
</script>
<asp:TextBox ID="txtWriter" runat="server" onkeypress="txtOnKeyPress()" />
* 虽然我确实在函数名称中添加了()
。
无论如何,如果ASP.NET存在该属性名称的问题,您只需在客户端附加一个处理程序即可。根据您的需要,input
事件可能更有意义。这是一种实时change
事件,它会在编辑输入值时触发(通过按键,剪切,粘贴等)。这是一个样本:
document.querySelector("input").addEventListener("input", function(e) {
console.log("value: %o", this.value);
});
&#13;
<input autofocus placeholder="type here"></input>
&#13;
注意浏览器兼容性here。
现在,上一个示例在输入值的每一次更改时都会触发...这可能非常有点,即: 4次,只需键入,&#34; test&#34;。由于您(可能)喜欢它来触发您的服务器端代码,因此我们希望在实际发布表单之前等待快速连续发生的任何更改:
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;
另请参阅:window.setTimeout()
,document.querySelector()
,document.getElementsByName
和EventTarget.addEventListener()
。
在你的代码背后:
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack && Request.Form["__EVENTTARGET"] == txtWriter.UniqueID) {
GridView1.DataSource = /* some data source */;
GridView1.DataBind();
}
}