私のページには、Ajax を使用する 2 つの要素があります。1 つは単純なチェックボックス (デフォルトを設定) で、もう 1 つはリンクによってトリガーされるポップアップ ウィンドウです。ポップアップ ウィンドウは多数の要素をロードする必要があるため、ajaxStart() によってトリガーされ、ajaxStop() で非表示になる「loading...」オーバーレイ div があります。
ajaxStart() 読み込みオーバーレイがチェックボックスとポップアップの両方でトリガーされることを除いて、すべて正常に機能します。私が望んでいないdivの素早い「フラッシュ」であるため、チェックボックスが面倒です。
私の質問: ページ上のすべての Ajax 対応要素ではなく、ページ上の特定の要素に対してのみ AjaxStart をトリガーするにはどうすればよいですか?
HTML
<input type="checkbox" id="defaultproject" />
<a class="openDialog" data-dialog-id="subscriberDialog" data-dialog-title="Project Subscriber" href="/Project/CreateSubscriber/1020" id="newsubscriber">Add Subscriber</a>
Javascript
//POPUP
$(document).ready(function () {
$(".openDialog").live("click", function (e) {
e.preventDefault();
$("<div></div>")
.addClass("dialog")
.attr("id", $(this).attr("data-dialog-id"))
.appendTo("body")
.dialog({
title: $(this).attr("data-dialog-title"),
close: function () { location.reload() },
modal: true,
draggable: false,
resizable: false,
width: 500
})
.load(this.href);
});
$(".close").live("click", function (e) {
e.preventDefault();
$(this).closest(".dialog").dialog("close");
});
//CHECKBOX
$("#defaultproject").change(function ()
{
var isitchecked = document.getElementById("defaultproject").checked
$.ajax({
url: '@Url.Action("SetDefaultProject")',
data: {"id": ProjectId, "isitchecked": isitchecked },
type: 'POST',
cache: 'false',
success: function (response) {
document.getElementById("defaultproject").disabled = "disabled";
},
error: function (xhr) {
alert('There was an error. Please try again');
document.getElementById("defaultproject").checked = ""
}
});
});
//SHOW LOADING DIV
//*** THIS IS WHERE I'M HAVING PROBLEMS
$('.openDialog').ajaxStart(function () {
$('#loadingdiv').show();
}).ajaxStop(function () {
$('#loadingdiv').hide();
});