2

ページにがASP:Buttonあります。次のように HTML としてレンダリングされます。

<input type="submit" name="myButton" value="Do something" 
    onclick="javascript:WebForm_DoPostBackWithOptions(
        new WebForm_PostBackOptions('myButton', '', true, '', '', false, false))"
    id="myButton" />

ここで、jQuery イベント ハンドラーを介して、このボタンの既定の動作 (フォームの送信) を防止しようとしています。

$('#myButton').click(function () { 
    // do some client-side stuff

    if (someCondition) {
        // don't postback!
        return false;
    }
});

ここでの問題は、ASP が入力に固執するインライン クリック ハンドラーが、毎回 jQuery イベント ハンドラーの前に実行されているように見えることです。

ここでの最も簡単な解決策は、のinput type="button"代わりにプレーンを使用することですASP:Button。残念ながら、これはこのシナリオで必要な他の多くのことを行うため、これは可能ではありません。ASP:Button

フォームの送信が行われないようにする最善の方法は何ですか? 文字列操作を使用して要素の属性の前にハンドラーを追加することを考えましたonclickが、これは本当に汚いようです。OnClientClickまた、ハンドラー関数を公開する必要があるため、の使用も避けたいと思います。より良い方法はありますか?

4

2 に答える 2

2

OnClientClick="return false;"aspx ボタン コントロールに属性を追加しようとしましたか?

javascriptイベントアンローダースクリプトを提供するこの投稿をチェックしてください: Is it possible to remove all event handlers of a given element in javascript?

最後のメソッド DomLib.prototype.removeEventsByTypeEx に興味があると思います

于 2012-08-09T20:20:14.213 に答える
0

私はちょうど方法を見つけました

<script type="text/javascript" src="Scripts/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
    $(function () {
        var ploopButton = null;
        $("#ploop").click(function (e) {
            ploopButton = this;
        });
        $("#form1").submit(function (e) {
            if (ploopButton !== null) {
                ploopButton = null;
                return confirm('are u sure?');
            }
            return true;
        });
    });
</script>
<form id="form1" runat="server">
    <asp:Button ID="ploop" Text="ploop" runat="server" OnClick="ploop_Click" />
</form>

基本的には、どのボタンがクリックされたかを示すグローバルフラグを使用し、フラグがオンになったときにフォームの送信を確認します

于 2012-08-10T00:21:08.860 に答える