Javascript 如何在我提交表单时停止onchange事件

Javascript 如何在我提交表单时停止onchange事件,javascript,asp.net,Javascript,Asp.net,我有一个javascript函数,它调用textbox的onChange事件 函数名为callOnChange() 我的文本框就像 <asp:TextBox ID="TextBox1" runat="server" onChange="callOnChange(this)"></asp:TextBox> 我还有一个提交按钮 但是,当我单击按钮时,名为first and then submit事件的onchage事件不起作用 那么如何应对呢 我不想在单击提交按钮时调

我有一个javascript函数,它调用textbox的onChange事件 函数名为callOnChange() 我的文本框就像

 <asp:TextBox ID="TextBox1" runat="server" onChange="callOnChange(this)"></asp:TextBox>

我还有一个提交按钮 但是,当我单击按钮时,名为first and then submit事件的onchage事件不起作用

那么如何应对呢

我不想在单击提交按钮时调用“onChange”

编辑


实际上,我刚才在上面的问题中给出了一个例子。但我有一系列的文本框,我在其中验证日期。每个文本框日期必须大于其上方文本框,然后再下方文本框将被启用,否则将保持禁用状态。因此,按键或按键事件在这里不会很有用。

onchange
在元素失去焦点(且值已更改)时激发。这是故意的行为


也许您想要一个不同的事件,比如
onkeyup

据我所知,没有优雅的方法,但简单的方法是使用全局计时器延迟事件,然后单击提交按钮将清除该计时器

为此,首先声明全局变量:

<script type="text/javascript">
    var textbox_changeTimer = 0;
    function callOnChange(sender) {
        //...
    }
<script>

var textbox_changeTimer=0;
函数callOnChange(发送方){
//...
}
现在,文本框有这样的代码:

<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事件。如果您有多个提交按钮或需要更优雅的代码,您可以将这些事件挂接到客户端代码中,对所有按钮进行迭代,但这并不重要。

您可以像影子向导所说的那样避免更改事件。请记住,如果在更改中显示
警报(“消息”)
,您将取消单击事件。之后,删除
警报(“消息”)
尝试
console.log(“消息”)
查看事件。(在chrome中按ctrl+shift+j打开javascript控制台)


试试JSFIDLE(不是我的!)

Onchange将在文本框中的值发生更改时触发。。。当您离开文本框时会发生这种情况。如果不希望出现这种行为,请尝试使用另一个事件,如onKeyDown?请查找编辑的问题onchange事件触发是否真的有问题?我认为您的问题只是提交事件不起作用……在asp.net中,有大量的验证程序控件,可以很好地用于您的场景。这一切都可以连接到提交按钮。他的问题不是触发的事件。它阻止了点击事件的触发。为什么javaScript不允许同时触发两个事件?非异步?@SubinJacob与synchronous无关,并不是所有的事件,只是特定的
onchange
事件确实会取消表单提交,因为它通常用于验证。模糊事件也会发生同样的情况。即使在默认情况下取消表单提交后,也会发生同样的情况。