2

テキストボックス関数名のonChangeイベントで呼び出しているjavascript関数がcallOnChange()であり、テキストボックスは次のようになっています

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

また、送信ボタンが1つありますが、ボタンをクリックすると、最初にonchageイベントが呼び出され、次に送信イベントが機能しません

では、どう対処する???

送信ボタンをクリックしているときに「onChange」を呼び出したくありません

編集

実際、私は上記の質問で例を挙げました。しかし、日付を検証している一連のテキストボックスがあります。各テキスト ボックスの日付は、その上のテキスト ボックスより大きくなければなりません。その後、下のテキスト ボックスが有効になります。それ以外の場合は、無効のままになります。したがって、keypress または keydown イベントは、ここではあまり役に立ちません。

4

3 に答える 3

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

Shadow Wizardが言ったように、変更イベントを回避できます。変更を表示すると、クリック イベントがキャンセルされることを忘れないでくださいalert("message")。その後、イベントを見てalert("message")みてください。console.log("message")(Chrome で ctrl+shift+j を押して JavaScript コンソールを開きます)。

このjsfiddleを試してください(私のものではありません!)

于 2013-08-05T14:59:34.473 に答える