jquery .dialog .jqprint повторяет предыдущее содержимое

#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.