0

ポストバックの前に、ページ上のすべての送信ボタンを無効にしたいと考えていました。3 つの (わずかに) 異なるコード サンプルが見つかりましたが、私のシナリオでは機能していません。

<script src="js/jquery-1.6.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(new function () {
        //debugger;

        // 1
        $('#form1').one('submit', function () {
            alert('.one');
            $(this).find('input[type="submit"]').attr('disabled', 'disabled');
        });

        // 2
        $("#form1").submit(function () {
            alert('.submit1');
            $('input[type=submit]').click(function () { return false; });
        });

        // 3
        $("#form1").submit(function () {
            alert('.submit2');
            $('input[type=submit]').click(false);
        });
    });
</script>

HTML (ソースの表示から):

<body>
    <form method="post" action="WebForm12.aspx" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMjA0OTM4MTAwNGRk6dbofDK5YUWMwPmdBDnRWPCTyBN22BpAo7Y3C+2Gycs=" />
</div>

<div class="aspNetHidden">

    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAgKC36LkAgKr4aeRA6gaPoGNYlZvnjW07iB+LnlhIUr0qrTFHOADKmQQuhv0" />
</div>
    <div>
        <input type="submit" name="btnPost" value="Post" id="btnPost" />
    </div>
    </form>
</body>

アップデート

putvandeが示したように、実際の問題は、ready イベント関数を定義する際の新しいキーワードでした。ただし、コード サンプルはまだ目的を達成していませんでした。

サンプル 1では、関連する OnClick ハンドラーが実際には実行されませんでした。これは、無効になっているためにボタンの値がサーバーにポストバックされなかったためです。

サンプル 2/3は、一度に後続のポストバックを防止しましたが、UI でボタンを有効にしたままにしました。

さらに検索すると、問題を解決するためのより適切な手法が得られました。以下のコードは、onbeforeunload イベントを使用して送信ボタンを完全に無効にします。

window.onbeforeunload = DisableButtons;

function DisableButtons() {
    $("input[type=submit]").attr('disabled', 'disabled');
}
4

3 に答える 3

0

イベントが に割り当てられることはありませんform。変更する必要があります:

$(document).ready(new function () {
                  ^^^

に:

$(document).ready(function () {

変更すると、送信機能が正しく機能します。

于 2013-07-29T10:40:41.680 に答える