如何在提交表格时停止onchange事件

时间:2013-08-05 11:57:39

标签: javascript asp.net

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

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

我也有一个提交按钮 但是当我点击按钮时,首先调用的onchage事件然后提交事件不起作用

那怎么处理呢???

当我点击提交按钮

时,我不想打电话给“onChange”

修改

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

3 个答案:

答案 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(不是我的!)