0

同様の問題を抱えているが、それでも答えが見つからない人もいるようです。これがシナリオです。

ユーザーは、コメントを作成できるテキストエリアを含む非表示のdivを表示するボタンをクリックします。

//show the div containing the textarea
$('#postTypeContainer').css({ 'display': 'block' });

次に、ユーザーがコメントを入力し、ボタンをクリックして送信すると、divが非表示になり、一部のデータがサーバーに送信されます。

$("#loading").ajaxStart(function () {
        $(this).show(); //shows a spinner
    }).ajaxComplete(function () {
        $(this).hide(); //hides the spinner

        //hide the div that was opened earlier
        $('#postTypeContainer').fadeOut('fast');
    });

    //send data
    $.ajax({
        type: "POST",
        url: rootUri + "main.aspx/StartNewThread",
        data: jsonText,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (markUp) {
           //stuff
        }
    });

これはすべて正常に機能します。

これで、ユーザーはクリックしてdivを再度開きます。これは問題なく機能します。

//show the div containing the textarea
$('#postTypeContainer').css({ 'display': 'block' });

次に、ユーザーはいくつかのデータを入力します。この場合は@abcです。これは、別のユーザーにタグを付けたいためです。次は、「keyup」でjQueryを使用して発生します。

//ajax call to find users matching the @abc
$.ajax({
        type: "POST",
        url: rootUri + "main.aspx/GetMatch",
        data: jsonText,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {

            //stuff

        }
    });

このajax呼び出しが戻るとすぐに、開かれたdivは、DOMがajax呼び出しの前の状態にリセットされているかのように閉じられます。そのため、textareaを操作しようとしている最中に、divがユーザーを閉じます。これは非常に苛立たしいことです。これを修正する唯一の方法は、ページを更新することです。これは明らかに、ajaxを使用して避けたいものです。誰かが何が悪いのか考えていることを願っています。私が失敗したことの1つは、タグ付けのためにajax呼び出しを行うキーアップで関数を入力するときに、divの状態を確認し、ajax呼び出しの最後に設定して開いたままにしようとすることですが、そうではありません働く。どんな助けでも大歓迎です。

4

1 に答える 1

1

.ajaxComplete()はグローバルなajaxイベントであり、jQueryajaxイベントが完了するたびに発生します。したがって、2番目のajax呼び出しが完了すると、postTypeContainerdivも非表示になります。その隠蔽を、その最初のajax呼び出しのローカルの完全なイベントにバインドしたいと思います。

$("#loading").ajaxStart(function () {
    $(this).show(); //shows a spinner
}).ajaxComplete(function () {
    $(this).hide(); //hides the spinner
});

//send data
$.ajax({
    type: "POST",
    url: rootUri + "main.aspx/StartNewThread",
    data: jsonText,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (markUp) {
       //stuff
    },
    complete: function() { // DO IT HERE

        //hide the div that was opened earlier
        $('#postTypeContainer').fadeOut('fast');

    }
});
于 2012-07-01T20:36:08.280 に答える