Я использую MVC Razor. Общая цель - создать всплывающую страницу «Просмотр».Предотвращение дублирования вызовов событий ajaxLoad, добавленных с событием click
кнопка видПечать на родительской странице, при нажатии на событие Ajax обжигали, который будет заполнять пустой DIV с содержимым, которые должны быть включены в предварительный просмотр печати:
//from the view
@Ajax.ActionLink("prntPreview", "Display", new { ID = Model.Detail.ID }, new AjaxOptions { UpdateTargetId = "modal" }, new { @class = "btnPreview" })
тогда, с помощью JavasScript/JQuery клонировать содержимое этого вновь заселенной DIV и создать новое окно с содержимым:
//in the scripts file
$('.btnPreview').on('click', function() {
$(document).ajaxStop(function() {
var pageData = $('#modal').html();
setTimeout(//add a slight delay
function() {
PopupPrint(pageData);
}, 300);
});
});
function PopupPrint(data) {
var mywindow = window.open('', '', 'height=500,width=800,resizable,scrollbars');
mywindow.document.write(data);
mywindow.focus();
//do some other stuff here
}
Это где я столкнуться с проблемами. В первый раз, когда я нажимаю, все работает так, как ожидалось, однако, если вы не перемещаетесь от родительской страницы и не пытаетесь снова использовать кнопку предварительного просмотра печати, всплывающее окно будет создано дважды, затем три раза и т. Д. С каждым дополнительный клик.
Я думаю, что проблема заключается в том, что каждый раз, когда нажимается .btnPreview
, создается новое событие $(document).ajaxStop
, в результате чего событие срабатывает многократно.
Я попытался создать ajaxStop в качестве именованной функции, которая объявлена вне рамок события щелчка, а затем очистить его, но это приводит к тому же результату:
var evnt = "";
$('.btnPreview').on('click', function() {
evnt =
$(document).ajaxStop(function() {
var pageData = $('#modal').html();
setTimeout(//add a slight delay
function() {
PopupPrint(pageData);
evnt = "";
}, 300);
});
});
У меня также есть другие ajaxStop
события инициализирован поэтому не хотите полностью отменить событие ajaxStop. Можно ли получить имя или что-то из каждого события ajax, чтобы я мог очистить это событие или подобное?
Этот подход позволит мне проверить, был ли скрытый div заполнен, что означает, что мне не нужно будет ждать ajax во второй раз. однако, каждый раз, когда я нажимаю кнопку предварительного просмотра печати, я должен дождаться, когда будет запущено событие ajax, потому что это добавление обновленного содержимого в предварительный просмотр. После печати предварительного просмотра содержимое скрытого div будет удалено (так как оно скоро истечет). – wf4