3

VisualStudio2010とMVC3をAJAX/JQueryで使用しています。私が抱えている問題は、コードが何かを2回投稿していることです。これは、何かを投稿してからもう一度実行した場合にのみ発生します。

これが私のJSです:

$(document).ready(function () {
   BindEvents();
});

function BindEvents() {
$('#OpenCommentDialog').click(function (event, ui) {
    var id = $(this).attr('data');
    $('#NewCommentDialog').dialog({
        open: function (event, ui) {
            $('#BugID').val(id);
            var form = $('form', '#NewCommentDialog');
            form.submit(function (e) {
                var comment = form.serialize(true);
                CreateComment(comment);
                return false;
            });
        }
    });
    $('#NewCommentDialog').dialog('open');
    return false;
});
}

function CreateComment(comment) {
if (comment != null) {
    $.post('/Comments/Create/', comment, function (data) {
        if (data == 'Success') {
            var id = $.parseQuery(comment);
            GetComments(id.BugID);
            $('#NewCommentDialog').dialog('close');
        }
    });
}
}

function GetComments(id) {
$('#Comments').find('tr').remove();
$.getJSON('/Comments/GetComments', { id: id }, function (data) {
    if (data != null) {
        if (data.length > 0) {
            $('#CommentListTemplate').tmpl(data).appendTo('#Comments');
        }
    }
});
}

私のHTMLページには、CreateCommentPartial.cshtmlファイルを呼び出すJQueryダイアログボックスがあります。ユーザーが入力すると、「CreateComment」関数が呼び出され、「GetComments」が呼び出され、新しいコメントが投稿された後にコメントが更新されます。

さて、ここに問題があります。ページをリロードしてフォームに入力せずに[コメントの作成]リンクをもう一度クリックすると、「CreateComment」が2回起動され、「GetComments」も2回起動されます。 Firebugはこれも示しています。

私はここで何が間違っているのですか?投稿後にページをリロード(F5)した場合、これは行われません。しかし、それは目的を打ち負かします。ページをリロードせずにコメントを複数回送信できるはずです。

4

2 に答える 2

1

上記のスクリプトをどこで宣言しましたか?部分ビューによってページに追加されたスクリプトでも同様の問題が発生しました。どういうわけか、ボタンをクリックするたびにスクリプトがページに追加され、スクリプトと投稿数が増加しました(スクリプトの各コピーが1回起動されます)。スクリプトを別の.jsファイルに入れ、マスターページで参照することで問題を解決しました

于 2011-02-26T09:05:53.050 に答える
0

この問題は、メソッドが2回呼び出されることによって発生します。イベントを制御に関連付けたときに、スイッチ変数を使用して解決できます。

例:

 var $isActualizaComentarioEventoAsignado = false;

 if (!$isActualizaComentarioEventoAsignado) {
                $isActualizaComentarioEventoAsignado = true;
                $('#pepe').bind('clic', function(e) {});
}
于 2014-07-22T14:57:10.717 に答える