我有一个javascript函数,它正在调用textbox的onChange事件 函数名是callOnChange() 我的文本框就像
<asp:TextBox ID="TextBox1" runat="server" onChange="callOnChange(this)"></asp:TextBox>
我也有一个提交按钮 但是当我点击按钮时,首先调用的onchage事件然后提交事件不起作用
那怎么处理呢???
当我点击提交按钮
时,我不想打电话给“onChange”修改
实际上我刚才在上面的问题中给出了例子。但我有一系列文本框,我正在验证日期。每个文本框日期必须大于其上方文本框然后在文本框下方将启用,否则它将保持禁用状态。所以keypress或keydown事件在这里不会很有用..
答案 0 :(得分:1)
onchange
将触发。这是预期的行为。
也许你想要一个不同的活动,比如onkeyup
?
答案 1 :(得分:1)
据我所知,没有优雅的方法,但简单的方法是使用全局计时器延迟事件,然后单击提交按钮将清除该计时器。
首先声明全局变量:
<script type="text/javascript">
var textbox_changeTimer = 0;
function callOnChange(sender) {
//...
}
<script>
现在有了文本框的代码:
<asp:TextBox ID="TextBox2" runat="server" onchange="textbox_changeTimer = window.setTimeout(function() { callOnChange(this); }, 100);"></asp:TextBox>
最后这样的提交按钮:
<asp:Button runat="server" Text="submit" OnClientClick="window.clearTimeout(textbox_changeTimer);" />
这将在单击按钮时取消onchange事件。如果您有多个提交按钮或想要更优雅的代码,您可以在客户端代码中挂钩这些事件,迭代所有按钮,但这并不重要。
答案 2 :(得分:1)
您可以像Shadow Wizard所说的那样避免更改事件。请记住,如果您在更改中显示alert("message")
,则会取消点击事件。之后,移除alert("message")
尝试console.log("message")
以查看该事件。 (在chrome中按ctrl + shift + j打开javascript控制台)。
尝试this jsfiddle(不是我的!)