0

全て:

jquery/mvc/knockout を使用して、データを取得し、$.post を使用してかなり高価なトランザクションでサーバーに投稿する Web アプリケーションを開発しています。

ユーザーが「ダブルクリック」したり、焦って2回クリックしたりしたくありません。何かが起こっていることを示すUIの手がかり以外に、この目的を達成するのに役立つと思われる方法を考え出しましたが、この方法で行うことに警告や隠れた危険がないことを確認したいと思います.

以下は、setTimeout を使用して「ajax 経由で送信」リクエストを模倣する JSFiddle です。関数「alreadyClicked」の内部フィールドを true に設定し、「ajax リクエスト」を実行し、後処理が終了した後に false に戻します。以下のフィドルに移動し、console.log をサポートするデバッガー ツール (la firefox) を使用している場合は、クレイジーなクリックをして、メソッドがメソッドに入るときとスキップするときに見ることができます。

http://jsfiddle.net/puhfista/vVUCm/7/

レンダリングしたいこのトピックに関するアドバイスをありがとう。

4

4 に答える 4

1

次のようにしてみませんか。

$("<your element selector>").click(function(){
    $(this).attr('disabled', 'disabled');
    //  do your postback here
});

ポストバックが完了したら、要素を元に戻すことを忘れないでください

于 2012-08-05T15:05:46.460 に答える
1

このプラグインを使用して、すでに処理中のフォーム送信をブロックできます。

http://www.malsup.com/jquery/block/

于 2012-08-05T15:06:12.610 に答える
0

@DimitryV: それは素晴らしい解決策ではありません。ユーザーがEnterキーを押してフォームを送信するなどのことをキャッチできるように、送信イベントをより適切にキーイングする必要があります。

$("form").submit(function () {
    $(this).attr('disabled', 'disabled');
    //  do your postback here
});

このようにして、すべての送信をキャッチします。念のため!

于 2014-03-06T16:32:10.577 に答える
0

あなたの質問で、このプロジェクトでノックアウトを使用していると述べました。あなたが望むものを達成するノックアウト方法は、ビューモデルで「isPosting」のようなものと呼ばれるオブザーバブルを宣言することです:

self.isPosting = ko.observable(false);

送信ボタンの html で、このオブザーバブルにデータ バインドします。

<button data-bind="click:doPost, disable: isPosting">Submit</button>

「doPost」クリック ハンドラーで、投稿が行われている間は isPosting を true に設定し、投稿が完了したら false に設定する必要があります。

于 2012-08-06T15:29:19.770 に答える