簡體   English   中英

我提交表單時如何停止onchange事件

[英]How to stop onchange Event while i am submiting the form

我有一個javascript函數正在調用文本框的onChange事件,函數名稱為callOnChange(),而我的文本框就像

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

而且我還有一個提交按鈕,但是當我單擊按鈕時,先調用onchage事件然后提交事件不起作用

那么如何處理呢???

我不想在單擊“提交”按鈕時調用“ onChange”

編輯

實際上我只是在上述問題中給出了示例。 但是我有一系列的文本框,我正在其中驗證日期。 每個文本框的日期必須大於其上方的文本框的日期,然后大於下方的文本框的日期,否則它將保持禁用狀態。 因此這里的keypress或keydown事件將不是很有用。

當元素失去焦點(並且值已更改)時,會觸發onchange 這是預期的行為。

也許您想要一個不同的事件,例如onkeyup

據我所知,沒有一種優雅的方法,但是簡單的方法是使用全局計時器延遲事件,然后單擊“提交”按鈕將清除該計時器。

為此,首先聲明全局變量:

<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事件。 如果您有多個提交按鈕,或者想要一些更精美的代碼,則可以將這些事件掛接到客戶端代碼中,遍歷所有按鈕,但這並不重要。

您可以像Shadow Wizard所說的那樣避免更改事件。 請記住,如果您在更改中顯示了alert("message") ,則將取消click事件。 之后,刪除alert("message")嘗試console.log("message")查看事件。 (Chrome中的ctrl + shift + j可打開JavaScript控制台)。

試試這個 jsfiddle(不是我的!)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM