2

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

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

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

那怎么处理???

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

编辑

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

4

3 回答 3

1

onchange当元素失去焦点(并且值改变)时触发。这是预期的行为。

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

于 2013-08-05T12:00:41.893 回答
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 事件。如果您有多个提交按钮或想要更优雅的代码,您可以在客户端代码中挂钩这些事件,迭代所有按钮,但这并不重要。

于 2013-08-05T12:25:35.687 回答
1

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

试试这个jsfiddle(不是我的!)

于 2013-08-05T14:59:34.473 回答