#jquery #dialog #jqprint
#jquery #диалоговое окно #jqprint
Вопрос:
У меня есть рабочее диалоговое окно, которое правильно загружает содержимое. В диалоговом окне также есть кнопка печати, которая выполняется .jqprint
против DIV
в диалоговом окне. В первый раз печатается нормально, но каждая последующая команда печати печатает все, что было напечатано первой. В диалоговом окне отображается правильная новая информация. Я добавил ALERT
кнопку, которая также показывает старое содержимое.
$("tr[id^=contract_]").css("cursor","hand").live("click",function(e) {
var sContract = $(this).attr("id").split("_")[1];
$("<div id="printthis" style="border:1px; #ffffff solid;"></div>")
.load("_contractdetails.aspx?contract=" sContract "")
.dialog({
autoOpen: true,
title: "Contract Detail",
draggable: true,
modal: true,
width:900,
height:450,
buttons: { "Close": function() { $(this).dialog("close"); },
"Print": function() { $("#printthis").jqprint(); },
"ALERT": function() { alert($("#printthis").html()); }
},
resizable: true
});
});
Почему не #printthis
создается заново каждый раз?
Должен ли я как-то уничтожить копию #printthis
в памяти?
Является ли это ограничением .jqprint
?
Комментарии:
1. Пожалуйста, смешайте
'
и"
кавычки, чтобы вам не пришлось устраивать оргии экранирования. Вам также необходимо использовать кавычки в селекторах атрибутов (в последних версиях jQuery они больше не являются необязательными).:$("tr[id^='contract_']")
Ответ №1:
Сначала вам нужно удалить старый div — иначе вы будете использовать одно и то же id
дважды, что может привести к множеству странностей в поведении. Другим решением было бы создавать div только при необходимости:
var div = $('#printthis');
if(!div.length) {
div = $('<div id="printthis" style="border:1px; #ffffff solid;"></div>');
}
Кроме того, вы можете захотеть открыть диалоговое окно с помощью успешного обратного вызова load()
, поскольку в противном случае вы открываете диалоговое окно со старым содержимым, а затем — несколько мгновений спустя, когда придет ответ сервера — обновите его новым содержимым.
Комментарии:
1. Спасибо @ThiefMaster, это привело меня к решению. Я добавил
$("#printthis").remove();
перед созданием div.